删除数组中的第一级标识符

时间:2012-02-28 12:34:14

标签: php arrays identifier levels

我认为此前已有过,但无法找到答案。如果已经回答,请通过链接指引我正确的方向。

我有一个数组,我不想删除第一级标识符。我认为这有一个功能吗?

示例:

[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

7 个答案:

答案 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)

PHP array_column

$new_array = array_column($old_array,0);

这将检索$ old_array中每个数组的索引0处的值。也可以与关联数组一起使用。

答案 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的预期结果键。因为不可能在数组中具有相同的键。如果相同,最后一个键将替换上一个。