Alvin Bakker
Alvin Bakker

Reputation: 1526

Use values that are in all arrays and skip the rest

I have an array with 3 sub arrays like:

$array = array(
    width => array(
        0 => 1,
        1 => 2,
        2 => 3,
        3 => 4,
        4 => 5
    ),
    height => array(
        0 => 1,
        1 => 2,
        2 => 7,
        3 => 8
    ),
    color => array(
        0 => 2,
        1 => 7,
        2 => 8
    )
);

The count is in this case 3 as I have 3 arrays. This can be sometimes more or less, that's why I have a count.

Now I want to find out which number is in all 3 arrays and only use those. in above example the only returned number should be 2 as it's present in all 3 sub arrays.

I was trying something like below, but am really stuck what's the best approach...

$i = count($array); // gives me back the count of 3 which is correct
$n = 0;
foreach($array as $key=>values) {
    foreach($values as $value) {
        // do not how to proceed :(
    }
}

Upvotes: 0

Views: 26

Answers (2)

NinjaNirmou
NinjaNirmou

Reputation: 1

Maybe you can affect your rows in some var and make what you want to do in your foreach

Like :

<?php

$width = 0;
$height = 0;
$color = 0 ;

$arrayBundleWidth = array();
$arrayBundleHeight = array();
$arrayBundleColor = array();

foreach ($array as $arrayRow){
   $arrayBundleWidth = $arrayRow['width'];
   $arrayBundleColor = $arrayRow['color'];
   $arrayBundleHeight = $arrayRow['height'];

   foreach ($arrayBundleWidth as $arrayBundleWidthtRow) {
    # code...
    #you got each index of your width array here
   }
   foreach ($arrayBundleHeight as $arrayBundleHeightRow) {
    # code...
    #you got each index of your height array here
   }
   foreach ($arrayBundleColor as $arrayBundleColorRow) {
    # code...
    #you got each index of your color array here
   }
}

?>

Try it and tell me ? Is it what you want ? Not sure if it's what you wanted to do !

Upvotes: 0

Barmar
Barmar

Reputation: 781848

You can call array_intersect with all the sub-arrays as arguments.

$common_values = call_user_func_array('array_intersect', $array);

Upvotes: 4

Related Questions