多维数组 - 如何从子数组中获取特定值

时间:2011-06-12 07:17:41

标签: php multidimensional-array

我有以下数组结构:

Array
(
    [0] => Array
        (
            [product_option_id] => 236
            [option_id] => 14
            [name] => Masura S
            [type] => select
            [option_value] => Array
                (
                    [0] => Array
                        (
                            [product_option_value_id] => 33
                            [option_value_id] => 53
                            [name] => Alb
                            [price] => 
                            [price_prefix] => +
                        )

                    [1] => Array
                        (
                            [product_option_value_id] => 35
                            [option_value_id] => 55
                            [name] => Rosu
                            [price] => 
                            [price_prefix] => +
                        )

                )

            [required] => 0
        )

    [1] => Array
        (
            [product_option_id] => 237
            [option_id] => 15
            [name] => Masura M
            [type] => select
            [option_value] => Array
                (
                    [0] => Array
                        (
                            [product_option_value_id] => 34
                            [option_value_id] => 58
                            [name] => Rosu
                            [price] => 
                            [price_prefix] => +
                        )

                )

            [required] => 0
        )
)

我发现自己在尝试显示此数组中的所有[name]值时迷失了方法。

我要做的是根据第一级[name](如[name] => Masura S)填充下拉选择表单,然后使用第二级[name]填充第二个下拉列表选项(如[name] => Alb)。

如果你有任何指示,我将不胜感激......

4 个答案:

答案 0 :(得分:6)

你可以用这种方式填充第一个选择:

<select>

    <?php $c=count($array);
    for ( $i=0; $i < $c; $i++)
    { ?>
        <option><?php echo $array[$i]['name'];?></option>
    <?php } ?>   

</select>

第二次选择:

<select>

    <?php 
    for ( $i=0; $i < $c; $i++)
    { 
        $c2=count($array[$i]); 
        for ($j=0;$j<$c2;$j++){ 
    ?>
        <option><?php echo $array[$i][$j]['name'];?></option>
    <?php }} ?>

</select>

答案 1 :(得分:5)

试试这个:

$name = array_column($array, 'name');

答案 2 :(得分:4)

我将名称分隔成这样的单独数组,之后根据需要填充下拉列表应该很容易:

$product_names = $option_names = array();
foreach ($products as $index => $product) {
    $product_names[$index] = $product['name'];

    foreach ($product['option_value'] as $option) {
        $option_names[$index][] = $option['name'];
    }
}

当您想要数组索引0的产品名称时,您将使用$ product_names [0](字符串),并且可以从$ option_names [0](数组)中找到该产品的选项名称。

上面的代码并不关心现有ID,因此如果您需要表单,则需要再扩展代码。

答案 3 :(得分:2)

您需要使用递归函数
这是一个例子

function recursion($array) {
    foreach ($array as $key => $value) {
        echo $value;
        if (is_array($value))
            $this->recursion($value);
    }
}

recursion($array);