Capture only one element of an array

2

I have the following array , how could I store in a new array only the "product_id" of all "store_id"?

array(2) { 
      [0]=> array(2) { 
          ["loja_id"]=> string(3) "286" 
               [0]=> array(2) { 
                   ["produto_id"]=> string(4) "7224" ["qtd"]=> int(1) 
                } 
               [1]=> array(2) { 
                   ["produto_id"]=> string(4) "7167" ["qtd"]=> int(1) 
               }
      }
      [1]=> array(2) { 
           ["loja_id"]=> string(3) "133" 
               [0]=> array(2) { 
                    ["produto_id"]=> string(4) "1078" ["qtd"]=> int(1) }
               } 
       }
    
asked by anonymous 30.01.2018 / 17:19

1 answer

2

You can use array_map() to modify / rearrange the output array and array_column() to capture the data of the produto_id key at a time.

The use keyword imports the variable $produtos into the scope of the anonymous function, note that it is changed by reference ( & ), array_push() combined with the ... operator add each element of the returned array by array_column() in $produtos

$str = '[{"loja_id":"286",  "0":{"produto_id":"7224","qtd":1},  "1":{"produto_id":"7235","qtd":1}},{"loja_id":"133","0":{"produto_id":"1078","qtd":1}}]';

$json = json_decode($str, true);

$produtos = array();
array_map(function($item) use(&$produtos){array_push($produtos, ...array_column($item, 'produto_id')); }, $json);

echo "<pre>";
print_r($produtos);

Return:

Array
(
    [0] => 7224
    [1] => 7235
    [2] => 1078
)
    
30.01.2018 / 17:32