Многомерный массив PHP в простой массив

Какой метод лучше всего подходит для преобразования многомерного массива

Array ( [0] => Array ( [id] => 11 ) [1] => Array ( [id] => 14 ) )

в простой массив? редактировать: "сплющенный" массив (спасибо arxanas за правильное слово)

Array ( [0] => 11 [1] => 14 )

Я видел несколько примеров, но есть ли более простой способ, кроме циклов foreach, implode или больших функций? Конечно, должна быть функция php, которая обрабатывает это. Или нет..?


person CyberJunkie    schedule 20.08.2012    source источник
comment
Каков размер исходного массива? Вы ищете версию, оптимизированную для скорости, или просто простой алгоритм?   -  person Yzmir Ramirez    schedule 20.08.2012
comment
Это называется выравниванием массива. Поиск в плоском массиве PHP возвращает множество возможных функций. К сожалению, array_flatten нет.   -  person Waleed Khan    schedule 20.08.2012
comment
Вы хотите иметь возможность восстановить исходный массив из сглаженной версии?   -  person Yzmir Ramirez    schedule 20.08.2012
comment
@YzmirRamirez исходный массив опубликован первым. Это всегда в этом формате, плюс-минус массивы.   -  person CyberJunkie    schedule 20.08.2012
comment
@YzmirRamirez нет, просто сглаженный массив   -  person CyberJunkie    schedule 20.08.2012
comment
@arxanas, спасибо! Я изо всех сил пытался найти термин, чтобы определить это   -  person CyberJunkie    schedule 20.08.2012
comment
«Всегда в этом формате»… так что это всегда двухэлементный массив? Если это так, то нет необходимости перебирать... просто array_merge() массивы. Я что-то упускаю?   -  person Yzmir Ramirez    schedule 20.08.2012


Ответы (4)


$array = array();
$newArray = array();

foreach ( $array as $key => $val )
{
    $temp = array_values($val);
    $newArray[] = $temp[0];
}

Посмотрите на это в действии: http://viper-7.com/sWfSbD


Здесь у вас есть это в форме функции:

function array_flatten ( $array )
{
    $out = array();

    foreach ( $array as $key => $val )
    {
        $temp = array_values($val);
        $out[] = $temp[0];
    }

    return $out;
}

Посмотрите на это в действии: http://viper-7.com/psvYNO.

person Joseph Silber    schedule 20.08.2012
comment
Ах... нам не нужны ключи...array_values() +1 - person Yzmir Ramirez; 20.08.2012
comment
@YzmirRamirez - Да. Это очень простой метод, который Я всегда использую. - person Joseph Silber; 20.08.2012
comment
Отличный ответ Джозеф! Умная идея с ключами - person Jared Drake; 20.08.2012

Если у вас есть многомерный массив, который не должен быть многомерным массивом (имеет одинаковые ключи и значения) и имеет несколько измерений глубины, вы можете просто использовать рекурсию, чтобы перебрать его и добавить каждый элемент в новый массив. Главное, чтобы голова не болела :)

person Jared Drake    schedule 20.08.2012

Вы можете использовать array_walk_recursive для выравнивания массива.

$ret = array(); 
array_walk_recursive($arr, function($var) use (&$ret) { 
  $ret[] = $var; 
}); 
var_dump($ret); 
person xdazz    schedule 20.08.2012

Вот пример. (Возможно, это не так «элегантно», как xdazz», но это альтернатива без использования замыкания «use».) Вот как массив может начинаться так:

Начать

array (size=2)
  0 => 
    array (size=1)
      'woeid' => string '56413072' (length=8)
  1 => 
    array (size=1)
      'woeid' => string '56412936' (length=8)      

Тогда вы можете захотеть иметь что-то вроде этого:

Цель

   array (size=2)
      0 => string '56413072' (length=8)
      1 => string '56412936' (length=8)

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

Код

$woeid = array();
array_walk_recursive($result['results']['Result'], function ($item, $key, $woeid) {
     if ($key == 'woeid') {                                       
           $woeid[] = $item;
     }
}, &$woeid);
person Layke    schedule 31.01.2013