1

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']);
        }
      }
    }
  }
1
  • array_filter seems to be fitted for your needs, but you can also do it with a foreach loop. Commented Mar 10, 2017 at 17:39

4 Answers 4

2

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

Sign up to request clarification or add additional context in comments.

Comments

1

using array_walk

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

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

Comments

1

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

Comments

1

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'));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.