2013-05-09 94 views
0

看來我有一個問題,關於數組會根據第二個數組的值和位置更改第一個數組的值。這似乎很難用文字來解釋,我會舉一個例子來說明這一點。更改值取決於在PHP中的數組的位置

我有此第一陣列

Array 
(
    [0] => one 
    [1] => two 
    [2] => three 
    [3] => four 
    [4] => five 
) 

,這是我的第二陣列

Array 
(
    [0] => 
    [1] => cat 
    [2] => 
    [3] => dog 
    [4] => 
) 

和我的期望的結果應該是這樣的

Array 
(
    [0] => one 
    [1] => cat 
    [2] => three 
    [3] => dog 
    [4] => five 
) 

所以如果我改變第二排列成這個

Array 
(
    [0] => 
    [1] => 
    [2] => 
    [3] => dog 
    [4] => cat 
) 

結果會是這樣

Array 
(
    [0] => one 
    [1] => two 
    [2] => three 
    [3] => dog 
    [4] => cat 
) 

所以含義,第二陣列將會像替換所述第一陣列的。

那麼我用array_diff得到兩個數組的差異,這就是我卡住的地方。

任何幫助將不勝感激,但。

回答

1

有可能是一個更好的辦法,但你可以這樣做:

for ($i = 0; $i < count($array1); $i++) { 
    if ($array2[$i] == null || $array2[$i] == "") { 
     $newArray[$i] = $array1[$i]; 
    } 
    else { 
     $newArray[$i] = $array2[$i]; 
    } 
} 

$newArray將包含來自$array1所有值,除非$array2存在一個非空或空值(基於數組索引)在這種情況下,它將覆蓋$array1中的值。

+0

,我一直在尋找的答案!太棒了!非常感謝。 :) – 2013-05-09 03:45:24

1

我認爲這應該工作:

foreach($second_array as $k => $v) 
{ 
    if($v != "") 
    { 
     $first_array[$k] = $v; 
    } 
} 

演示here

1

做會遍歷你的第二個陣列,並指定它的價值,基於密鑰的第一個最簡單的事情......

$arr1=array ("one","two","three","four","five"); 
$arr2=array(2=>"cat",4="dog"); 

foreach ($arr2 as $key=>$value){ 
if (!empty($value)){ 
    $arr1[$key]=$value; 
    } 
} 
+0

根據他的帖子,他看起來在他的第二個數組中有匹配鍵的空值。如果這是真的,那麼他只是要在array1中覆蓋他的值。 – 2013-05-09 03:36:21

+0

是的,我發佈後就發現了。給我的發言增加了一個條件 – bkdude 2013-05-09 03:37:12