Удалить первые уровни идентификатора в массиве

Я думаю, что это было раньше, но не могло найти ответа на него. Если он уже ответил, укажите мне в правильном направлении ссылку.

У меня есть массив, который я не хочу удалить первые уровни идентификатора. Я думаю, что для этого есть функция?

Пример того, как это делается:

[0] => Array ( [8] => Röd ) [1] => Array ( [8] => Blå ) [2] => Array ( [6] => Bobo ) [3] => Array ( [8] => Grön ) [4] => Array ( [7] => Sten ) [5] => Array ( [8] => Vit ) [6] => Array ( [7] => Guld ) [7] => Array ( [6] => Lyxig ) 

Что я хочу

 [8] => Röd [8] => Blå [6] => Bobo [8] => Grön [7] => Sten [8] => Vit [7] => Guld [6] => Lyxig 

Проблема здесь заключается в сохранении ключей для требуемого идентификатора. У вас есть строки с именами, которые имеют один и тот же ключ (например, Blå и Röd). Вам нужно либо хранить их в массиве, либо захотеть потерять ключ.

Пример с php5.3:

 $processed = array_map(function($a) { return array_pop($a); }, $arr); 

Это даст вам:

 [0] => Röd [1] => Blå [2] => Bobo [3] => Grön [4] => Sten [5] => Vit [6] => Guld [7] => Lyxig 

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

 [8] => Array ( [0] => Röd, [1] => Blå, [2] => Vit, [3] => Grön ) [6] => Array ( [0] => Bobo, [1] => Lyxig ) [7] => Array ( [0] => Sten, [1] => Guld ) 

Чтобы получить эту структуру, будет работать простой цикл:

 $processed = array(); foreach($arr as $subarr) { foreach($subarr as $id => $value) { if(!isset($processed[$id])) { $processed[$id] = array(); } $processed[$id][] = $value; } } 

PHP array_column

 $new_array = array_column($old_array,0); 

Это будет извлекать значение в индексе 0 для каждого массива в $ old_array. Может также использоваться с ассоциативными массивами.

использование:

  public function remove_level($array) { $result = array(); foreach ($array as $key => $value) { if (is_array($value)) { $result = array_merge($result, $value); } } return $result; } 

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

  $results = array(); array_walk($array, function($v, $k) use($key, &$val){ array_merge($results, $v); }); 
 foreach($array as $key=>$val) { $newarr[$val] = $array[$key][$val]; } 

непроверенный!

Проверьте это, что ожидаемый результат

 <?php $arrData = array( "5" => array ( "8" => "Vit" ), "6" => array ( "7" => "Guld" ) ); foreach($arrData as $key=>$value): foreach($value as $k=>$v): $data[$k] = implode(',',$arrData[$key]); endforeach; endforeach; print_r($data); ?> 

Попробуйте объединить массив с оператором splat:

  print_r(array_merge(...$array));