Intereting Posts
Назначить по ссылке ошибка mysql – создать индексированный часовой столбец из существующей метки времени Опубликовать в OLX с помощью php или любой другой альтернативы как присвоить значения массива php массиву javascript хранить несколько размеров одного образа, подсистемы файловой системы или базы данных Те же индексы массивов – последовательное сравнение Преобразование плоского массива в иерархический многомерный массив Yii Fixtures – Исключение: Неизвестные свойства «проекты» для класса «ProjectTest» Получить файлы внутри каталога Как получить доступ к ресурсам в папке приложения? Как работает маршрутизация MVC? Laravel: невозможно создать файл миграции с командой make: migration PHP: Есть ли команда, которая может удалить содержимое файла без его открытия? Почему я получаю эту ошибку PHP session_start ()? Вытягивать последние новости с внешнего сайта без RSS-ленты – preg_match ()?

php Извлеките массив родительского уровня из набора массивов и узлов объединения

Я ужасен с манипулированием массивами … учитывая эту структуру, я хочу удалить массив верхнего уровня и объединить все подмножества в один плоский массив:

Array ( [0] => Array ( [0] => Array ( [0] => hey.com ) [1] => Array ( [0] => you.com ) ) [1] => Array ( [0] => Array ( [0] => this.com ) [1] => Array ( [0] => rocks.com ) ) ) 

к желаемой структуре:

 Array ( [0] => hey.com [1] => you.com [2] => this.com [3] => rocks.com ) 

Скорость важна – мы будем иметь дело с сотнями тысяч результатов

Вы можете использовать RecursiveArrayIterator

 $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($data)); $list = iterator_to_array($it,false); var_dump($list); 

Вывод

 array (size=4) 0 => string 'hey.com' (length=7) 1 => string 'you.com' (length=7) 2 => string 'this.com' (length=8) 3 => string 'rocks.com' (length=9) 

См. Простой демонстрационный пример

 $flat = call_user_func_array('array_merge', $arr); 

Это сгладит массив на ровно один уровень . Он возьмет образец ввода, который вы предоставили, и произведет желаемый результат, который вы попросили.

Убедиться

  1. ваш родительский массив использует числовые индексы
  2. родительский массив имеет хотя бы один дочерний элемент, иначе вы получите ошибку php из-за того, что array_merge жалуется на отсутствие аргументов.

Для тех, кто задается вопросом, как это работает:

 // with $arr = [ [1,2,3], [4,5,6] ]; // call_user_func_array('array_merge', $arr) is like calling array_merge($arr[0], $arr[1]); // and with $arr = [ [1,2,3], [4,5,6], [7,8,9] ]; // then it's like: array_merge($arr[0], $arr[1], $arr[2]); // and so on... 

Если вы используете php 5.6+, оператор splat ( ... ) может быть более читаемым способом:

 $flat = array_merge(...$arr); 
 <?php //Very simple recoursive solution $array = array( array( array('hey.com'), array('you.com') ), array( array('this.com'), array('rocks.com'), array( array('its.com'), array( array('soo.com'), array('deep.com') ) ) ) ); function deepValues(array $array) { $values = array(); foreach($array as $level) { if (is_array($level)) { $values = array_merge($values,deepValues($level)); } else { $values[] = $level; } } return $values; } $values = deepValues($array); echo "<pre>"; print_r($values); echo "</pre>"; ?> 

Я не знаю, как получить такой аррал, но это решение получает только значения.

[отредактировано] Im sorry, его самый сладкий:

 function deepValues(array $array, array &$values) { foreach($array as $level) { if (is_array($level)) { deepValues($level, $values); } else { $values[] = $level; } } } 

Если ваши массивы всегда имеют одинаковую ранее известную глубину, возможно, вы можете хорошо использовать

http://php.net/manual/es/function.array-merge.php

Если массив имеет только один уровень от ассоциативного индекса и только с одним элементом:

 foreach($arr as $key=>$val) { if (is_array($arr[$key])) $arr[$key] = $arr[$key][0]; } Getting: [file] => Array ( [name] => black.png [type] => image/png [tmp_name] => /tmp/phpfupdU5 [error] => 0 [size] => 197782 ) from: [file] => Array ( [name] => Array ( [0] => black.png ) [type] => Array ( [0] => image/png ) [tmp_name] => Array ( [0] => /tmp/phpfupdU5 ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 197782 ) ) 

Если значения всегда находятся на одном уровне глубины, вы действительно можете использовать array_merge:

 $array = [ [ ['hey.com'], ['you.com'], ], [ ['this.com'], ['rocks.com'], ], ]; print_r(array_merge(... array_merge(... $array))); Getting: Array ( [0] => hey.com [1] => you.com [2] => this.com [3] => rocks.com )