0

Je travaille avec un tableau PHP indexé qui ressemble à cette structure:Récupérer valeur de clé basée sur une autre valeur clé au sein de la même ligne d'un tableau 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] =>) 
) 

Je tente de filtrer le tableau ci-dessus un préconstruit pOUR CHAQUE déclaration qui ressemble à ceci:

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

donc, si _Product-getSku $() donne 691294, je voudrais récupérer la valeur correspondante de « inventaire » du même indice/ligne du tableau PHP .

La colonne array_ ci-dessus dans FOR EACH ne fonctionnait pas. J'ai aussi essayé une fonction basée sur array_filter qui a échoué à donner des résultats appropriés:

<?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; ?> 

Y at-il une meilleure approche lorsque l'on travaille avec des tableaux multidimensionnels tels que ci-dessus? Merci d'avance.

Répondre

2

Vous devez d'abord créer une nouvelle matrice avec index/clé contenant sku et colonne/valeur contenant l'inventaire de $ result array.

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

utiliser ensuite le nouveau tableau dans la boucle

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

Si $ _Product-getSku() donne 691294, Invetory sera 33

+0

@AbraCadaver Oui, mais dans ce cas, la fonction array_column est calle d pour chaque itération. –

+0

Bon point ..... :-) – AbraCadaver

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

Utilisez comme ceci:

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