【问题标题】:Get all values of a specific column in a multidimensional array [duplicate]获取多维数组中特定列的所有值
【发布时间】:2013-06-14 02:08:00
【问题描述】:

我有一个多维数组,即 x 列和 y 行。

我特别想要第三列中的所有值。

执行此操作的明显方法是将其放入这样的 for 循环中

for(i=0;i<y-1;i++)
{
   $ThirdColumn[] = $array[$i][3];
}

但是这里涉及到明显的 O(n) 时间复杂度。是否有一种内置方法可以让我简单地从数组中提取这些行中的每一行而无需循环。

例如(这在场外不起作用)

$ThirdColumn  = $array[][3]

【问题讨论】:

  • 不,这个想法的任何迭代都会在某处包含至少一个 for 循环......这是不可避免的
  • 发布你的数组的 print_r
  • 为什么需要我的数组的 print_r ?
  • 查看数据的结构
  • 第三列应该是 [2],而不是 [3]...

标签: php arrays multidimensional-array


【解决方案1】:

给定一个二维数组$channels

$channels = array(
    array(
        'id' => 100,
        'name' => 'Direct'
    ),
    array(
        'id' => 200,
        'name' => 'Dynamic'
    )
);

一个不错的方法是使用array_map:

$_currentChannels = array_map(function ($value) {
    return  $value['name'];
}, $channels);

如果您是通过array_column 的当权者(php 5.5+):

$_currentChannels = array_column($channels, 'name');

两个结果:

Array
(
    [0] => Direct
    [1] => Dynamic
)

明星嘉宾: array_map (php4+) 和 array_column (php5.5+)

// array array_map ( callable $callback , array $array1 [, array $... ] )
// array array_column ( array $array , mixed $column_key [, mixed $index_key = null ] )

【讨论】:

    【解决方案2】:

    我是否有一种内置方法可以简单地从数组中提取这些行中的每一行而无需循环。

    还没有。 很快就会有一个名为array_column() 的函数。但是复杂度是一样的,只是优化了一点,因为它是用 C 和 PHP 引擎实现的。

    【讨论】:

      【解决方案3】:

      试试这个....

         foreach ($array as $val)
         {
             $thirdCol[] = $val[2];
         }
      

      你最终会得到一个包含第三列所有值的数组

      【讨论】:

      • 这是不正常的,我在帖子中所说的显而易见的方法是通过 foreach 循环,但无论如何感谢
      【解决方案4】:

      另一种方法是$newArray = array_map( function($a) { return $a['desiredColumn']; }, $oldArray );,尽管我认为它不会对性能产生任何显着(如果有的话)改进。

      【讨论】:

        【解决方案5】:

        你可以试试这个:

        $array["a"][0]=10;
        $array["a"][1]=20;
        $array["a"][2]=30;
        $array["a"][3]=40;
        $array["a"][4]=50;
        $array["a"][5]=60;
        
        $array["b"][0]="xx";
        $array["b"][1]="yy";
        $array["b"][2]="zz";
        $array["b"][3]="aa";
        $array["b"][4]="vv";
        $array["b"][5]="rr";
        
        $output = array_slice($array["b"], 0, count($array["b"]));
        
        print_r($output);
        

        【讨论】:

          猜你喜欢
          • 2016-11-17
          • 1970-01-01
          • 2022-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多