PHP Массив Форматирование для внутреннего массива массива без использования RecursiveIteratorIterator - PullRequest
0 голосов
/ 27 ноября 2018

Как я могу получить этот формат?Результат должен быть динамическим:

1 
a 
b 
0

Это мой оригинальный массив:

$arr = array(0 => 1,
        array(
            0 => 'a',
            1 => 'b'
        ),
        'c' => '0'
    );

Я пробовал:

$kArr = array();
for($i=0; $i<count($arr); $i++ ){
    $iArr = array();
    echo $arr[$i];
    foreach($arr[$i] as $key => $value){
        if(!is_array($value)) continue;

        foreach($value as $subKey => $subValue){            
            $iArr[] = $subValue;
        }
    }

    if(count($iArr) > 0 )
        $kArr[$i] = $iArr;
}

echo '<pre>'; print_r($kArr);

Где я ошибаюсь?если есть другой метод, пожалуйста, дайте мне знать.

Ответы [ 5 ]

0 голосов
/ 27 ноября 2018

Я написал функцию, которая получает значения внутренних массивов и добавляет их в правильном порядке:

function array_values_recursive(array $array)
{
    $values = array_values($array);

    foreach ($values as $key => $value) {
        if (is_array($value)) {
            $innerValues = array_values_recursive($value);

            if ($innerValues) {
                array_splice($values, $key, 1, $innerValues);
            }
        }
    }

    return $values;
}

Пример:

$array = array(
    0 => 1,
    array(
        0 => 'a',
        1 => 'b'
    ),
    'c' => '0'
);

$values = array_values_recursive($array);

echo(implode(PHP_EOL, $values));

Будет печатать:

1
a
b
0
0 голосов
/ 27 ноября 2018
function flatten($array) {
    // flattened array
    $flat = [];
    // flattening anonymous function 
    $flatten = function ($array) use (&$flatten, &$flat) {
        // loop over an array
        foreach ($array as $item) {
            // if item is array, use flattening function 
            if (is_array($item)) {
                $flatten($item);
            } else {
                // else push item to flattened array
                $flat[] = $item;
            }
        }
    };
    // initial call of flattening function
    $flatten($array);

    // return flattened array
    return $flat;
}

var_dump(flatten([
    0 => 1,
    [
        0 => 'a',
        1 => 'b'
    ],
    'c' => '0'
]));
0 голосов
/ 27 ноября 2018
foreach ($arr as $k => $v) {
        if (is_array($v)) {
            foreach ($v as $k2 => $v2) {
                echo "$v2\n";       
            }
        } else {
            echo "$v\n";
        }
    }

если вы хотите сделать это с нуля, вы можете попробовать что-то вроде этого.

0 голосов
/ 27 ноября 2018

Для достижения желаемого результата вы должны пройти через переменную $ arr и проверить, является ли это массив, используя функцию is_array .Если это массив, переберите этот массив и выведите значения.Попробуйте следующий код.

$arr = array(0 => 1,
        array(
            0 => 'a',
            1 => 'b'
        ),
        'c' => '0'
    );
foreach($arr as $key => $value)
{
    if(is_array($value))
    {
        foreach($value as $inner_key => $inner_value)
        {
            echo "<br>";
            echo $inner_value;
        }       
    }
    else
    {
            echo "<br>";
            echo $value;        
    }
}
0 голосов
/ 27 ноября 2018

Просто используйте array_walk_recursive.

$r = [];
array_walk_recursive($arr, function ($e) use (&$r) {
    $r[] = $e;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...