通过整数而不是关联键名访问数组列

6

我该如何使用array_column()函数来获取数组的第一列,而不是通过列名来获取呢?

我需要实现的效果类似于:

array_column($array,[0])

替换为:

array_column($array,"key");

2
array_column($array, array_keys($array)[0]); - Gino Pane
对我不起作用。似乎array_column需要一个索引名称。 - Viktor Joras
3个回答

5

对我不起作用。似乎array_column需要一个索引名称。 - Viktor Joras

2
array_column()函数可以使用整数作为索引来获取一个列,但是需要该整数键存在。否则,您需要确定第一个子数组的第一个键才能动态访问该列。
代码:(演示)
$array = [
    ["foo" => "bar1", "hey" => "now"],
    ["foo" => "bar2", "hey" => "what"],
    [0 => "zero", 1 => "one"]
];

var_export(array_column($array, 'foo'));  // get the column by name
echo "\n---\n";
var_export(array_column($array, 0));  // don't need to be a string
echo "\n---\n";
var_export(array_column($array, key(current($array))));  // access the first subarray, access its key
echo "\n---\n";
var_export(array_column($array, array_shift(array_keys($array))));  // this generates a Notice, and damages the array

输出:

array (
  0 => 'bar1',
  1 => 'bar2',
)
---
array (
  0 => 'zero',
)
---
array (
  0 => 'bar1',
  1 => 'bar2',
)
---

Notice: Only variables should be passed by reference in /in/hH79U on line 14
array (
  0 => 'zero',
)

如果您使用循环或函数迭代器,可以调用current()reset()访问每行的第一个元素,但如果这些第一个元素具有不同的键,则这不是技术上的数据列。在演示中可以看到这种情况 - 您会无意中获取来自不同键的值。
var_export(array_map('current', $array));
// ['bar1', 'bar2', 'zero']

2

除非您提前确定每个数组的第一个元素的键是什么,否则无法使用array_column函数完成此操作。

您需要使用foreach()循环并使用reset()获取第一个元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接