【问题标题】:Is there any array function by which I can get the expected result? [duplicate]是否有任何数组函数可以让我得到预期的结果? [复制]
【发布时间】:2013-07-11 06:40:18
【问题描述】:

有没有可以得到预期结果的数组函数?

我的数组

$a = array(
[0] => array( 'id' => 6 ),
[1] => array( 'id' => 5 ),
[2] => array( 'id' => 8 ),
[3] => array( 'id' => 4 ),
);

预期结果

$a = array(
[0] => 6,
[1] => 5 ,
[2] => 8 ,
[3] => 4,
);

我可以使用 foreach 循环来做到这一点。但我正在寻找一个数组函数..

【问题讨论】:

  • 如果你有这种想法,可以使用array_walk 来生成一个新数组。
  • 从 PHP 5.5.0 开始,array_column() 函数将轻松为您提供预期的结果。
  • @salathe,您应该将其发布为答案,这是一个很好的答案。
  • @salathe 谢谢。但我的 php 版本是 5.3.25
  • @LukeMills ,有些人有诚信承认,单行答案不应该被 20k+ 用户发布。

标签: php arrays


【解决方案1】:

严格来说,是的,有一个函数array_walk()

array_walk($a, function (&$value) {
    $value = $value['id'];
});

但在这种情况下,foreach 循环可能更有效:

foreach ($a as &$value) {
    $value = $value['id'];
}

与 array_walk 相比,foreach 循环的开销非常小,array_walk 必须在每次调用回调函数时创建和销毁函数调用堆栈。

请注意,在每种情况下,$value 都是通过引用传递的(使用 & 运算符)。这意味着数组已就地更改,无需复制数组。

【讨论】:

  • @DevlshOne,直到我发布答案后,我才看到你的评论,我保证 :)
  • 请注意,数组永远不会像这样复制,即使没有通过引用传递也是如此。 PHP 比不必要的重复数据更智能。
【解决方案2】:

【讨论】:

  • @tere 说真的?!回答问题现在是repwhoring?尤其是当其余的答案都由 IMO 主导时,答案不是那么好?关于这一班轮,没有什么可说的了。
  • @deceze 如何在不发布答案的情况下进行repwhoring,这是我的问题。
  • 作为旁注:虽然我同意这个问题很糟糕并且提出了为什么 OP 需要不同的解决方案的问题,但没有人提供欺骗或近距离投票,所以我想回答这个很好。然而,单线几乎从来没有是一个好的答案,20k+ 的用户在回答问题时应该是榜样。添加手册的链接并添加一个小解释并不需要太多努力。
  • @Gordon 提示已采纳。表达得更加淋漓尽致。 :) 但说真的,有时我很难说更多关于不言自明的单衬...
【解决方案3】:

在这种情况下,Foreach 似乎更有效。

$resultArray = array();
foreach ($a as $key => $value){
    $resultArray[] = $value['id'];
}

【讨论】:

    【解决方案4】:

    这里是你如何使用array_walk,

    $a = array(
    0 => array( 'id' => 6 ),
    1 => array( 'id' => 5 ),
    2 => array( 'id' => 8 ),
    3 => array( 'id' => 4 ),
    );
    
    
    array_walk($a, function ($ar, $val) {
           global $a;
           $a[$val] = $ar['id'];
        }
    );
    

    结果数组将产生

    (
        [0] => 6
        [1] => 5
        [2] => 8
        [3] => 4 )
    

    对于 php 版本 5.5 及更高版本,以下命令应该可以工作。

    $a = array_column($a, 'id');
    

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多