Самый эффективный способ перебрать массив в массиве - PullRequest
0 голосов
/ 03 мая 2018

Немного нового вопроса, но я все равно задам:

В настоящее время, когда у меня есть массив внутри массива, и я хочу получить все значения массива, я использую цикл foreach внутри цикла foreach. Например:

$array = [
    $inner_array1 = [1, 2, 3, 4],
    $inner_array2 = [a, b, c, d]
];

foreach ($array as $arr) {
    foreach ($arr as $a) {
        echo $a;
    }
}

Есть ли лучший, более эффективный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Вы смотрели на array_walk_recursive? Это не обязательно более эффективно, но может быть и лучше, в зависимости от того, что вы пытаетесь сделать.

Вот пример с вашими массивами (как указано выше). В примере игнорируются ключи (в соответствии с вашим образцом), но они доступны. Ваш образец проходит только один уровень, но вы можете сделать это больше, если вам нужно.

<?php
$array = [
    $inner_array1 = [1, 2, 3, 4],
    $inner_array2 = [a, b, c, d]
];

function test_print($item, $key)
{
    echo $item;
}

array_walk_recursive($array, 'test_print');
?>
0 голосов
/ 03 мая 2018

Мне пришлось протестировать то, что я написал в комментариях, и быстрее сначала объединить массив, а затем зациклить его.

$all = array_merge($array["arr1"], $array["arr2"]);
foreach ($all as $a) {
    echo $a;
}

быстрее, чем выполнение вложенных циклов, как в вопросе.
См. Результаты https://3v4l.org/aFP6o по всем методам.

0 голосов
/ 03 мая 2018

Вы можете использовать recursive function в случае, если у вас будет более 2-х вложенных массивов

$array = [
    'inner_array1' => [1, 2, 3, 4],
    'inner_array2' => ['a', 'b', 'c', 'd']
];

function loop($array){
    foreach($array as $value){
        if(is_array($value)){
            loop($value);
        }else{
            echo $value;
        }
    }
}
loop($array);

Тест здесь

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