PHP无需循环从多维数组中提取值

5
我想知道是否有可能在PHP中从数组中提取值,而不必通过循环来实现。以下是我的数组的一部分,这样你就知道我的意思了:
Array
(
[0] => Array
    (
        [0] => 76
        [1] => Adventures of Huckleberry Finn
    )

[1] => Array
    (
        [0] => 65
        [1] => Adventures of Huckleberry Finn
    )

[2] => Array
    (
        [0] => 59
        [1] => Bookcases
    )
)

我需要从每个数组中获取整数[0],有没有一种比foreach循环(通常我采用的方式)更快地完成此操作的函数?

谢谢。


您想提取所有数据吗?还是只需要特定的数据? - Daryl Gill
我需要一个只包含数字的数组,如 array(76, 65, 59)。 - Dan
5个回答

10

确信您正在寻找array_column函数。

$newArray = array_column($originalArray,'0');
根据PHP手册所述,使用此函数可以从一个数组的数组中提取您需要的唯一信息。通常与关联数组一起使用,但您也可以使用数字作为参数,同样有效。

1

请使用清晰的循环,你的同行会感谢你。它可能比其他任何解决方案都要快,而且明确的代码优于晦涩的循环避免。

仅作为一个例子:你需要多少秒才能看出:

list($b) = call_user_func_array('array_map',array_merge(array(null),$a));

...做了什么?

达到效果。不要使用它。


0

尝试:

array_walk($array, function(&$v) { $v = $v[0]; });

这应该将数组转换为您想要的格式。


最终的结果是什么与以下代码相同:foreach ($array as &$v) $v = $v[0]; - bwoebi
当然,他要求不使用foreach的方法。array_walk的优点是$v不会污染命名空间。 - Michael Thessel

0

你可能正在寻找array_walk()函数

$newArray = array();
$myCallback = function($key) use(&$newArray){
  $newArray[] = $key[0];
};

array_walk($myArray, $myCallback);

当然,如果您在变量$myArray中拥有您的数组


我刚刚测试了一下,使用你所需的值设置$newArray,它完美地工作了。 - Peter Featherstone

0

你最终是指array_walk...但这也是某种循环吗?那么答案是否定的。

我认为除了编写自己的C扩展之外,没有任何更快的方法(:-P)


我现在正在查看array_walk。我的期望输出是array(76, 65, 59) - array_walk能做到这一点吗? - Dan
请参见此答案:https://dev59.com/GHDYa4cB1Zd3GeqPB5jU ;) - bwoebi

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