使用较旧的array-php中的值重新填充较新的数组

时间:2014-01-30 22:32:08

标签: php arrays multidimensional-array

Hello Stack Overflow社区,

我正在尝试使用新排序的array2更新array1中的值,并将最终数组输出为array2。我一直想要解决这个问题几天,但似乎无法得到它。你很有可能告诉我我是php新手。任何人都可以帮助我吗?

以下是两个数组 - 'array1'是第一个,'array2'是:

Array (
    [0] => Array
        (
            [id] => bbb
            [hammer] => $1,000
        )

    [1] => Array
        (
            [id] => ccc
            [hammer] => $678
        )

    [2] => Array
        (
            [id] => aaa
            [hammer] => $222
        )

) Array (
    [0] => Array
        (
            [id] => aaa
            [hammer] => GBP 135
        )

    [1] => Array
        (
            [id] => bbb
            [hammer] => GBP 610
        )

    [2] => Array
        (
            [id] => ccc
            [hammer] => GBP 413
        )

)

现在我的代码尝试使用第一个数组中的'hammer'值更新第二个数组中新重新排序的'id'值。这是我的代码:

foreach($array2 as $key => $val) {
    $a = $array2[$key]['id'];
    $hammer_a = $array2[$key]['hammer'];

    foreach($array1 as $key => $val) { 
        $b = $array1[$key]['id'];
        if($a===$b){ 
            $hammer_b = $array1[$key]['hammer']; 
            $array2[$key]['hammer'] = $hammer_b;
        }
    } 
}

然而,正如此代码所示,我在下面留下了不希望的结果。我想'id''aaa'的原始'锤子'价值为222美元,等等其他'id':

Array
(
    [0] => Array
        (
            [id] => aaa
            [hammer] => $1,000
        )

    [1] => Array
        (
            [id] => bbb
            [hammer] => $678
        )

    [2] => Array
        (
            [id] => ccc
            [hammer] => $222
        )

)

有谁能告诉我我做错了什么?

3 个答案:

答案 0 :(得分:2)

在第二个循环中更改$key$val的名称。他们互相压倒。

答案 1 :(得分:0)

不要在你的内部foreach循环中使用$ key。你想要array2的密钥。

答案 2 :(得分:0)

还有这个选项,代码少得多:

$items[0] = array('id'=>'bbb','hammer'=>'$1,000');
$items[1] = array('id'=>'ccc','hammer'=>'$678');
$items[2] = array('id'=>'aaa','hammer'=>'$222');

function cmp($a, $b) {
    return strcmp($a['id'], $b['id']);
}

echo '<pre>';
var_dump($items);

usort($items, "cmp");

var_dump($items);
echo '</pre>';