Многомерный массив - как получить конкретные значения из подмассива - PullRequest
6 голосов
/ 12 июня 2011

У меня следующая структура массива:

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 ]

6 голосов
/ 12 июня 2011

Вы можете заполнить первый выбор следующим образом:

<select>

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

</select>

2-й выбор:

<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>
5 голосов
/ 18 ноября 2015

Попробуйте это:

$name = array_column($array, 'name');
4 голосов
/ 12 июня 2011

Я бы разделил имена на отдельные массивы, как это, после этого должно быть легко заполнять выпадающие списки по мере необходимости:

$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] (массив).

Приведенный выше код не заботится о существующих идентификаторах, так что если они вам нужны дляформу, вам нужно было бы расширить код немного больше.

2 голосов
/ 12 июня 2011

Вам нужно будет использовать рекурсивную функцию
вот пример

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

recursion($array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...