我认为此前已有过,但无法找到答案。如果已经回答,请通过链接指引我正确的方向。
我有一个数组,我不想删除第一级标识符。我认为这有一个功能吗?
示例:
[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
答案 0 :(得分:12)
此处的问题是保留所需标识符的键。你有一些具有相同键的名称字符串(如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
很明显内部数组上的键需要保留,因为它们是某种id。有了这个说你必须改变你想要的结束结构,因为你可以在一个数组中有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;
}
}
答案 1 :(得分:5)
答案 2 :(得分:3)
尝试使用splat运算符合并数组:
print_r(array_merge(...$array));
答案 3 :(得分:1)
使用:
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);
});
答案 4 :(得分:0)
foreach($array as $key=>$val) {
$newarr[$val] = $array[$key][$val];
}
未测试!
答案 5 :(得分:0)
检查一下这是预期的结果
<?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);
?>
答案 6 :(得分:0)
下面的代码也将获得相同的结果。
$resultArray = array_map('current',$inputArray);
OR
$resultArray = array_map('array_pop',$inputArray);
注意:我已经忽略了OP的预期结果键。因为不可能在数组中具有相同的键。如果相同,最后一个键将替换上一个。