15

我认为这已经出现过,但找不到任何答案。如果已经回答,请通过链接指出我正确的方向。

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

示例:

[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
4

7 回答 7

16

这里的问题是保留您想要的标识符的密钥。您有一些名称字符串具有相同的键(如 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;
   }
}
于 2012-02-28T12:44:59.640 回答
16

尝试使用 splat 运算符合并数组:

   print_r(array_merge(...$array));
于 2017-12-11T13:15:53.973 回答
6

PHP数组列

$new_array = array_column($old_array,0);

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

于 2016-09-27T18:13:29.570 回答
2

利用 :

  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);
    });
于 2012-02-28T13:11:08.230 回答
1

下面的代码也将达到相同的结果。

$resultArray = array_map('current',$inputArray);

或者

$resultArray = array_map('array_pop',$inputArray);

注意:我忽略了 OP 的预期结果键。因为数组中不可能有相同的键。如果相同,最后一个键将替换前一个键。

于 2019-02-13T14:23:36.143 回答
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);
?>
于 2012-02-28T12:48:30.190 回答
0
foreach($array as $key=>$val) { 
  $newarr[$val] = $array[$key][$val]; 
} 

未经测试!

于 2012-02-28T12:40:35.547 回答