我有一个多维数组,比方说x列数和y行数。
我特别想要第3列中的所有值。
这样做的显而易见的方法是将它放在像这样的for循环中
for(i=0;i<y-1;i++)
{
$ThirdColumn[] = $array[$i][3];
}
但是这里涉及O(n)的明显时间复杂性。是否有内置的方法让我只需从数组中提取每一行而无需循环。
例如(这不适用于当场)
$ThirdColumn = $array[][3]
答案 0 :(得分:20)
给定二维数组$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 ] )
答案 1 :(得分:2)
我是否有内置的方法可以简单地从数组中提取每一行而无需循环。
还没有。 将成为一个名为array_column()
的函数。然而,复杂性将是相同的,它只是稍微优化一点,因为它是在C和PHP引擎内部实现的。
答案 2 :(得分:1)
试试这个......
foreach ($array as $val)
{
$thirdCol[] = $val[2];
}
您最终会得到第3列
中所有值的数组答案 3 :(得分:0)
你可以试试这个:
$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);
答案 4 :(得分:0)
另一种方法是$newArray = array_map( function($a) { return $a['desiredColumn']; }, $oldArray );
,但我认为它不会对性能产生任何重大改善(如果有的话)。