使用foreach循环创建多维数组

8
我正在尝试使用foreach循环在PHP中创建一个多维数组。以下是迄今为止的代码:
$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>';    

这段代码的输出是一个单维数组,但不是我们想要的。我们希望的数组应该如下所示: OutputGoal 为了达到这个目标,该怎么修改代码呢?

你是想将两个数组合并成一个数组,还是从这两个数组的数据中创建一个新数组? - Lance
3个回答

16

你已经接近成功了,只需在数组创建时添加等级即可 :)

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

输出

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
        )

)

我有这个问题。我需要从foreach中得到类似这样的东西。$arrOptions = array( array( 'value' => 'value1', 'label' => 'label1' ) );在foreach中,value和label是相同的变量。 我的尝试是:$arrOptions = array(); foreach($daterange as $option) { $arrOptions[value] = $option->format; $arrOptions[label] = $option->format; } - user1551496

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

如果您正在编辑,请注意此仅包含代码的答案缺少其教育性解释。 - mickmackusa
我重新格式化了自己七年前的答案中的代码。我没有什么要补充的。 :) - Tomasz Kowalczyk
你可以解释一下原帖作者的代码出了什么问题,或者你的代码是如何产生预期输出结果的。 - mickmackusa
@TomaszKowalczyk 谢谢您提供这个答案;它让我从将多维数组转换为CSV的编码低谷中走出来了。 - dimButTries

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接