Получить значение ключа на основе другого значения ключа в той же строке массива PHP

Я работаю с индексированным массивом PHP, который похож на эту структуру:

$result =   Array(
[0] => Array([storepickup_id] => 3[sku] => 691294[inventory] => 33[reserve] => )
[1] => Array([storepickup_id] => 3[sku] => 692284[inventory] => 3[reserve] => )
[2] => Array([storepickup_id] => 3[sku] => 692289[inventory] => 4[reserve] => )
[3] => Array([storepickup_id] => 3[sku] => 693510[inventory] => 8[reserve] => )
[4] => Array([storepickup_id] => 3[sku] => 150893[inventory] => 2[reserve] => )
[5] => Array([storepickup_id] => 3[sku] => 150906[inventory] => 4[reserve] => )
)

Я пытаюсь отфильтровать вышеуказанный массив с помощью готового оператора FOR EACH, который выглядит следующим образом:

<?php foreach ($_productCollection as $_product): ?>
<?php
echo "SKU: " . $_product->getSku();
echo "INVENTORY: " . array_column($result, 'inventory', $_product->getSku());
<?php endforeach; ?>

Поэтому, если $ _product-getSku () выдает 691294, я бы хотел получить соответствующее значение «инвентаря» из того же индекса / строки массива PHP.

Приведенный выше массив array_column в FOR EACH не работает. Я также попытался использовать функцию на основе array_filter, которая не дала правильных результатов:

<?php foreach ($_productCollection as $_product): ?>
<?php
function my_function($item_values)
{
if ($item_values = $_product->getSku())
{
return true;
}
return false;
}
$sku = $_product->getSku();
print_r(array_filter($sku,"my_function"));
?>
<?php endforeach; ?>

Есть ли лучший подход при работе с многомерными массивами, как указано выше? Заранее спасибо.

0

Решение

Сначала вам нужно создать новый массив с индексом / ключом, содержащим sku, и столбцом / значением, содержащим инвентарь из массива $ result.

$new_array = array_column($result, 'inventory', 'sku');

Затем используйте новый массив в цикле

<?php foreach ($_productCollection as $_product): ?>
<?php
echo "SKU: " . $_product->getSku();
echo "INVENTORY: " . $new_array[$_product->getSku()];
<?php endforeach; ?>

Если $ _product-getSku () выдает 691294, Invetory будет 33

2

Другие решения

function getIndex($needle, $haystack, $array){
foreach($array as $key => $value){
if(is_array($value) && $value[$haystack] == $needle)
return $key;
}
return null;
}

Используйте как это:

$i = getIndex(691294, 'Sku', $array);
echo $array[$i]['inventory'];
1