8

I am trying to create a multidimensional array in PHP using a foreach loop. Here is the code thus far:

$levels = array('low', 'medium', 'high');
$attributes = array('fat', 'quantity', 'ratio', 'label');

foreach ($levels as $key => $level):
       foreach ($attributes as $k =>$attribute):
             $variables[] = $attribute . '_' . $level;
       endforeach;
endforeach;

echo '<pre>' . print_r($levels,1) . '</pre>';   
echo '<pre>' . print_r($variables,1) . '</pre>';    

The output from this code is a single dimension array; however, that is not the intent. The desired array should look like this:

OutputGoal

How should the code be modified to achieve the goal?

knot22
  • 2,648
  • 5
  • 31
  • 51
  • Are you trying to combine two arrays into a single array, or create a new array from the data in those two arrays? – Lance Aug 08 '13 at 20:42

3 Answers3

16

You're aaalmost there. Just add the level to the array creation :)

$levels = array('low', 'medium', 'high');
$attributes = array('fat', 'quantity', 'ratio', 'label');

foreach ($levels as $key => $level):
       foreach ($attributes as $k =>$attribute):
             $variables[$level][] = $attribute . '_' . $level; // changed $variables[] to $variables[$level][]
       endforeach;
endforeach;

echo '<pre>' . print_r($levels,1) . '</pre>';   
echo '<pre>' . print_r($variables,1) . '</pre>';  

Output

Array
(
    [low] => Array
        (
            [0] => fat_low
            [1] => quantity_low
            [2] => ratio_low
            [3] => label_low
        )

    [medium] => Array
        (
            [0] => fat_medium
            [1] => quantity_medium
            [2] => ratio_medium
            [3] => label_medium
        )

    [high] => Array
        (
            [0] => fat_high
            [1] => quantity_high
            [2] => ratio_high
            [3] => label_high
        )

)
JimL
  • 2,501
  • 1
  • 19
  • 19
  • I have this problem. I need someting like that out of a foreach. `$arrOptions = array( array( 'value' => 'value1', 'label' => 'label1' ) );` Foreach value and label is the same variable. What i try is `$arrOptions = array(); foreach($daterange as $option) { $arrOptions[value] = $option->format; $arrOptions[label] = $option->format; }` – user1551496 Mar 24 '16 at 19:46
6
$levels = ['low', 'medium', 'high'];
$attributes = ['fat', 'quantity', 'ratio', 'label'];

$result = [];
foreach ($levels as $level) {
    $result[$level] = [];
    foreach ($attributes as $attribute) {
        $result[$level][] = $attribute . '_' . $level;
    }
}

var_dump($result);
Tomasz Kowalczyk
  • 10,472
  • 6
  • 52
  • 68
1
$levels = array('low', 'medium', 'high');
$attributes = array('fat', 'quantity', 'ratio', 'label');

foreach ($levels as $key => $level){
    foreach ($attributes as $k =>$attribute){
             $variables[$level][] = $attribute . '_' . $level;
   }
}

print_r($variables);

http://codepad.viper-7.com/xlvZ2W