【问题标题】:PHP extract values from multidimensional array without a loopPHP从多维数组中提取值而无需循环
【发布时间】:2013-03-28 12:28:49
【问题描述】:

我只是想知道是否可以在 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 循环更快的函数(我通常这样做的方式)?

谢谢。

【问题讨论】:

  • 您想提取所有数据吗?或细节。
  • 我需要一个只有数字的数组,所以 array(76, 65, 59)

标签: php arrays loops foreach extract


【解决方案1】:

确定您正在寻找array_column 函数。

$newArray = array_column($originalArray,'0');

如 PHP 手册中所述,使用此函数,您可以从数组数组中提取您需要的唯一信息。它通常与关联数组一起使用,但您可以使用数字作为参数,它也可以使用。

【讨论】:

    【解决方案2】:

    寻找一个清晰的循环,你的程序员同事会感谢你的。它可能与任何其他解决方案一样快或快,并且清晰的代码比晦涩的循环躲避更可取。

    作为一个例子:你需要多少秒才能看到什么:

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

    ...是吗?

    成功了。不要使用它。

    【讨论】:

      【解决方案3】:

      您可能正在寻找 array_walk()

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

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

      【讨论】:

      • 我刚刚对此进行了测试,它完美地将$newArray 设置为您需要的值。
      【解决方案4】:

      试试:

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

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

      【讨论】:

      • 什么终于一样了:foreach ($array as &$v) $v = $v[0];
      • 当然,他要求一种无需 foreach 的方法。 array_walk 的优点是$v 不会污染命名空间。
      【解决方案5】:

      您最终的意思是 array_walk ...但这也是某种循环?那么:答案是否定的。

      而且我认为没有更快的方法(除了用 C 编写自己的扩展 :-P)

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 2013-06-25
      • 2019-07-17
      • 2012-05-13
      • 1970-01-01
      相关资源
      最近更新 更多