所以我有一个如下所示的多维数组:
[0]=>
array(4) {
["id"] => 110
["list"] => {}
["MainProduct"] => 2 <- Step2: Replace the 2 with a 5 where productName is Oranges
["productName"] => Oranges <- Step1: Find where we have "Oranges"
}
[1]=>
array(4) {
["id"] => 111
["list"] => {}
["MainProduct"] => 110
["productName"] => Apples
}
最终,我需要实现的是找到
value
productName 的 key
是否等于 Oranges
并基于此替换同一个子数组中 value
MainProduct 的 key
。
我想我应该首先找到包含
Oranges
的数组的索引,然后将 value
替换为 key
mainProduct 但似乎无法正确完成。
他们key
的名字总是一样的,而value
的名字却不同
另外,数组是动态的,所以带有
Oranges
的数组不会总是有相同的索引。
这是想要的结果:
[0]=>
array(4) {
["id"] => 110
["list"] => {}
["MainProduct"] => 5 <- This is changed to 5 where productName is "Oranges"
["productName"] => Oranges
}
[1]=>
array(4) {
["id"] => 111
["list"] => {}
["MainProduct"] => 110
["productName"] => Apples
}
您提出的策略略有不同:
<?php
$data = [
[
"id" => 110,
"MainProduct" => 2,
"productName" => "Oranges",
],
[
"id" => 111,
"MainProduct" => 110,
"productName" => "Apples",
]
];
$map = [];
array_walk($data, function($entry) use ($data, &$map) {
$map[$entry['id']] = $entry['productName'];
});
$output = [];
array_walk($data, function(&$entry) use($data) {
$mainProduct = array_search($entry['MainProduct'], $data);
$entry['productName'] = $data[$mainProduct]['productName'];
});
print_r($data);
输出为:
Array
(
[0] => Array
(
[id] => 110
[MainProduct] => 2
[productName] => Oranges
)
[1] => Array
(
[id] => 111
[MainProduct] => 110
[productName] => Oranges
)
)
如果你得到密钥并结合
productName
值,那么你可以搜索它并获得密钥。然后使用密钥更新MainProduct
:
$array[array_search('Oranges', array_combine(array_keys($array), array_column($array, 'productName')))]['MainProduct'] = 5;
如果
productName
是唯一的,那么我将修改数组以对其进行索引:
$array = array_column($array, null, 'productName');
$array['Orange']['MainProduct'] = 5;