Alen
Alen

Reputation: 1291

How to select arrays in multidimensional array with a value in php

To put it right lets say I have an array stores-

array:3 [▼
  0 => "store3"
  1 => "store"
  2 => "store2"
]

This is the array which holds values.

Other array products holds all the data:-

array:2 [▼
  0 => array:2 [▼
    "store" => "store"
    "product" => "1"
  ]
  1 => array:2 [▼
    "store" => "store"
    "product" => "4"
  ]
  2 => array:2 [▼
    "store" => "store2"
    "product" => "2"
  ]
  3 => array:2 [▼
    "store" => "store2"
    "product" => "3"
  ]
  4 => array:2 [▼
    "store" => "store3"
    "product" => "7"
  ]
  5 => array:2 [▼
    "store" => "store3"
    "product" => "11"
  ]
]

What I want is that a value is picked from stores array eg store3 then it is compared with products array and being searched and extract all the arrays inside products array which has the store value store3 and store it in another new array named store3

I have tried to do it but it was very wrong I mean it didn't work! I will post it if anyone say so but can anyone accomplish this?

My work:-

$temp = array();
  for($i=0; $i<count($stores); $i++)
  {
    //$stores[$i] = array();

    foreach($products as $p)
    {
      if(session($stores[$i]) == $p['store'])
      {
        if(count(session($stores[$i])) == 0)
        {
          $temp['product'] = $p['product'];
          session($stores[$i])->push($temp['product']);
        }
        else if(!in_array($p['product'],$stores[$i]))
        {
          $temp['product'] = $p['product'];
          session($stores[$i])->push($temp['product']);
        }
      }
    }
  }

Upvotes: 1

Views: 4854

Answers (4)

jagpreet
jagpreet

Reputation: 84

I made a simple function to find products in store

function searchProduct($products,$storeName){
    $results =array();
    foreach($products as $product){
        if(in_array($storeName,array_values($product)))
           $results[] = $product;    
    }
    return $results;
 }
 print_r(searchProduct($products,'store3'));

Upvotes: 1

Death-is-the-real-truth
Death-is-the-real-truth

Reputation: 72299

Do it like below:-

$final_array = array();
foreach($array1 as $arr){
  foreach($array2 as $arr2){
     if($arr == $arr2['store']){
       $final_array[$arr]['product'][] = $arr2['product'];
     }
  }
}
echo "<pre/>";print_r($final_array);

Output:-https://eval.in/752498

Upvotes: 2

user2762134
user2762134

Reputation:

using array filter

$store = 'store1';

$products = array_filter($products, function($product) use($store) {
    return (isset($product['store']) and $product['store'] == $store);
});

var_dump($products);

https://eval.in/752508

Upvotes: 1

hassan
hassan

Reputation: 8288

using array_walk

$array = [];
array_walk($products, function ($value, $key) use ($stores, &$array) {
    $array[$value['store']][] = $value['product'];
});

live sample : https://3v4l.org/BfeMm

Upvotes: 1

Related Questions