Я думаю, что это было раньше, но не могло найти ответа на него. Если он уже ответил, укажите мне в правильном направлении ссылку.
У меня есть массив, который я не хочу удалить первые уровни идентификатора. Я думаю, что для этого есть функция?
Пример того, как это делается:
[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));