Изменить значения определенного ключа в многомерном массиве
Нужно изменить значения ключа [sku] в массиве arr на значения из массива arr2. Результат должен быть следующим:
Array ( [0] => Array ( [sku] =>9404 [stockQuantity] => 10 [incoming] => [prices] => ) [1] => Array ( [sku] =>9401 [stockQuantity] => 15 [incoming] => [prices] => ))
Ниже код, но он работает не совсем правильно. Как достичь нужного результата?
wc_get_product_id_by_sku это функция Woocommerce, которая возвращает в переменную $id значение ID товара в соответствии с sku товара.
$data = '[
{
"sku": "NPQ10",
"stockQuantity": 10,
"incoming": null,
"prices": null
},
{
"sku": "WS11",
"stockQuantity": 15,
"incoming": null,
"prices": null
}
]';
$arr = json_decode($data, true);
$arr2 = array();
for ($i = 0; $i < count($arr); $i++) {
$id = wc_get_product_id_by_sku($arr[$i][sku]);
array_push($arr2,$id);
}
for($j = 0; $j <= count($arr2); $j++) {
foreach ($arr as &$entry) {
foreach ($entry as $key => &$val) {
if ($key == "sku") {
$val=$arr2[$j];
}
}
}
}
print_r($arr);
Ответы (1 шт):
Автор решения: Hopex Development
→ Ссылка
Я не совсем понял задачу, но подозреваю, что нужно модифицировать ключи sku.
Это можно сделать намного проще, чем вы предлагаете, используя всего один цикл:
$data = '[
{
"sku": "NPQ10",
"stockQuantity": 10,
"incoming": null,
"prices": null
},
{
"sku": "WS11",
"stockQuantity": 15,
"incoming": null,
"prices": null
}
]';
$data = json_decode($data, true);
foreach ($data as &$item) {
// ниже вы должны использовать свою функцию
$item['sku'] = "modify-{$item['sku']}";
}
var_export($data);
Итог:
array (
0 =>
array (
'sku' => 'modify-NPQ10',
'stockQuantity' => 10,
'incoming' => NULL,
'prices' => NULL,
),
1 =>
array (
'sku' => 'modify-WS11',
'stockQuantity' => 15,
'incoming' => NULL,
'prices' => NULL,
),
)