繁体   English   中英

获取多维数组中特定列的所有值

[英]Get all values of a specific column in a multidimensional array

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

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

这样做的显而易见的方法是将其置于这样的for循环中

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

但是这里涉及O(n)的明显时间复杂性。 有没有内置的方法让我只需从数组中提取每一行而无需循环。

例如(这不适用)

$ThirdColumn  = $array[][3]

给定一个二维数组$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的potentate (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 ] )

有没有内置的方法让我只需从数组中提取每一行而无需循环。

还没。 将会有一个名为array_column()的函数。 然而,复杂性将是相同的,它只是稍微优化一点,因为它是在C和PHP引擎内部实现的。

试试这个....

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

你将得到第3列所有值的数组

你可以试试这个:

$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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM