2012-11-20 67 views
1

這是我的第一陣列如何識別在陣列改性元素在PHP

$old = array(
1,2,3,4,5 
); 

$new(
2,4,5,6 
); 

我可以通過使用foreach命令做,然後用兩個陣列進行比較。但問題是我必須分開,哪些數字是新加入的,哪些數字已被刪除。

而且兩者陣列可以動態改變

編輯:

我創建了一個功能

function get_diff($old,$new){ 
$small_arr = $large_arr = array(); 

if(count($old) > count($new)){ 
    $small_arr = $new; 
    $large_arr = $old; 
}else{ 
    $small_arr = $old; 
    $large_arr = $new; 
} 

$arr = array_diff($large_arr, $small_arr); 

return $arr; 

} 

回答

1
$old = array(
1,2,3,4,5 
); 
print_r($old); 

$new = array(
2,4,5,6 
); 
print_r($new); 
$removed = array_diff($old, $new); 
print_r($removed); 

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

使用數組差異基本上

+0

哇......很簡單,完美地工作,謝謝xelbel :) – Mifas

2

試試這個:

<?php 
$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 

print_r($result); 
?> 

$ array1中的多次出現都以相同的方式處理。這將輸出:

Array 
(
    [1] => blue 
) 
+0

感謝。但我必須找到哪些元素被添加,哪些被刪除 – Mifas

0
<?php 

function get_diff($old,$new){ 
$small_arr = $large_arr = array(); 

if(count($old) > count($new)){ 
    $small_arr = $new; 
    $large_arr = $old; 
}else{ 
    $small_arr = $old; 
    $large_arr = $new; 
} 

    $arr = array_diff($large_arr, $small_arr); 
    $values = "New values = "; 
    foreach($arr as $arr_values){ 
     $values.=$arr_values.","; 
    } 
    $values.="<br/>"; 
    $same_arr = array_intersect($large_arr,$small_arr); 
    $values.= "Earlier values = "; 
    foreach($same_arr as $same_values){ 
     $values.=$same_values.","; 
    } 
return $values; 

} 
$old = array(1,2,3,4,5); 

$new= array(2,4,5,6); 
echo get_diff($old,$new); 
?> 

DEMO