から$arr1
のspecial
行を基に構築したいと思い$arr2
ます。
$arr1 = Array
(
[0] => Array
(
[1111] => Array
(
[itemid] => 4321
[itemcode] => item1
[avail] => 0
)
[2222] => Array
(
[itemid] => 4321
[itemcode] => item2
[avail] => 20
)
)
[1] => Array
(
[3333] => Array
(
[itemid] => 1342
[itemcode] => item3
[avail] => 10
)
)
)
$arr2 = Array
(
[1111] => Array
(
[itemid] => 4321
[itemcode] => item1
[special] => 10
)
[2222] => Array
(
[itemid] => 4321
[itemcode] => item2
[special] => 2
)
[3333] => Array
(
[itemid] => 1342
[itemcode] => item3
[special] => 1
)
)
私の希望する結果は次のようになります。
$arr1 = Array
(
[0] => Array
(
[1111] => Array
(
[itemid] => 4321
[itemcode] => item1
[avail] => 0
[special] => 10
)
[2222] => Array
(
[itemid] => 4321
[itemcode] => item2
[avail] => 20
[special] => 2
)
)
[1] => Array
(
[3333] => Array
(
[itemid] => 1342
[itemcode] => item3
[avail] => 10
[special] => 1
)
)
)
2つの多次元配列でこれを行う方法は理解していますが、追加の配列のラップアラウンド$arr1
により、forループが必要だと思いますが、3番目の新しい配列を作成したくないので、に特別な値を指定し$arr1
ます。
私は次のバリエーションを試しました:
$arr1 = array_map(function($v) use($arr2){
$v = (array)$v;
$key = array_search(array_column($v["itemcode"]), array_column($arr2, 'itemcode'));
$v["special"] = $arr2[$key]["special"];
return $v;
}, $arr1);
これはspecial
、新しいインデックスが$arr1
(new)に表示されていても、データをインデックスに追加できません。
ガイダンスは大歓迎です!マップはとてもクールでパワフルですが、その素晴らしさを完全に把握することはできないようです。
ネストされたforeach
ループを使用するだけです。参照変数を使用して、元の配列をその場で変更できるようにします。
foreach ($arr1 as &$el1) {
foreach ($el1 as $key => &$el2) {
$el2['special'] = $arr2[$key]['special'];
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加