2013-05-09 92 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