簡體   English   中英

在php中比較兩個數組

[英]comparing two arrays in php

我用這個代碼:

 $new = array(
     "123" => "a",
     "456" => "b"
 );

 $old = array(
     "123" => "a",
     "456" => "b"
 );

然后$new數組變成這樣:

 $new = array(
     "456" => "b",
     "123" => "c",
     "789" => "e"
 );

如您所見, $new數組的數量增加了,元素的順序也改變了,鍵123的值也改變了。 我需要將$new數組與$old數組進行比較,只捕獲鍵123上的值所做的更改,而無需關心元素的順序和計數。 我試過了:

 $result = array_diff( $new, $old );
 print_r( $result );

輸出:

 Array ( [123] => c [789] => e )

UPDATE。 相當混亂。 現在我想我們明白了

$old = array(
    "123"    => "a",
    "456"    => "b"
);
$new = array(
    "456"    => "b",
    "123"    => "c", // catch this (element in old array that is changed)
    "789"    => "e"
);

$new2 = array();
foreach ($new as $key => $new_val)
{
    if (isset($old[$key])) // belongs to old array?
    {
        if ($old[$key] != $new_val) // has changed?
            $new2[$key] = $new[$key]; // catch it
    }
}

// output $new2:
array (
  123 => 'c',
)

首先,您希望將$new元素與$old相比更改(請參閱array_diff_assoc ):

$changed = array_diff_assoc($new, $old);

在那個結果中,你只想擁有那些在$old中具有鍵的元素(參見array_intersect_key ):

$result  = array_intersect_key($changed, $old);

就是這樣。 如果它有幫助,你可以將它包裝在一起:

array_intersect_key(array_diff_assoc($new, $old), $old);

結果是:

array(1) {
  [123] =>
  string(1) "c"
}

完整示例( 演示 ):

$old = array(
    "123" => "a",
    "456" => "b"
);

$new = array(
    "456" => "b",
    "123" => "c", // catch only the change made on the value at key 123 
    "789" => "e"
);

$changed = array_diff_assoc($new, $old);
$result  = array_intersect_key($changed, $old);

var_dump($result);

最后一點:PHP中有許多數組函數。 值得仔細閱讀列表,看看哪些是合適的,因為大多數情況下你只需要其中的一兩個來完成這些事情。

您可以根據需要使用此代碼

 <?php
    function key_compare_func($key1, $key2)
    {
        if ($key1 == $key2)
            return 0;
        else if ($key1 > $key2)
            return 1;
        else
            return -1;
    }

    $array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
    $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

    var_dump(array_intersect_ukey($array1, $array2, 'key_compare_func'));
    ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM