[英]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.