为什么array_values比foreach更好?

5
为什么使用 array_values() 比使用 foreach 循环对数组重新索引更好? 示例 1:
$arrays = [
  1 => '0',
  2 => '1',
  3 => '2',
  4 => '3',
  5 => '',
  6 => '',
  7 => '7',
  8 => [
    0 => 'toto',
    1 => 'manu',
    2 => 'noé',
    3 => 'david'
  ]
];

$arrayNonAssoc = [];
foreach ($arrays as $array) {
     $arrayNonAssoc[] = $array;
}

因此,示例1是不应该发生的错误,而...

示例2:

$arrays = [
  1 => '0',
  2 => '1',
  3 => '2',
  4 => '3',
  5 => '',
  6 => '',
  7 => '7',
  8 => [
    0 => 'toto',
    1 => 'manu',
    2 => 'noé',
    3 => 'david'
  ]
];

var_dump(array_values($arrays));

我已经阅读过相关内容,但未找到对此的解释。无论是示例1还是示例2都返回相同的结果...

这是关于性能的吗?


除了你的数组无效(你有2个键为7的条目)这一事实外,这取决于具体情况...但一般来说,对于较小的数组,array_values()是一个单独的函数调用,而不是使用foreach的代码块…一个函数调用与一个循环和赋值相比。 - Mark Baker
1
没有规定、指南、建议或最佳实践告诉任何人使用 array_values() 而不是 foreach()(反之亦然)。投票关闭这个问题,因为它不适合在 SO 上: 对这个问题的回答往往基本上都是基于意见,而不是事实、参考资料或特定专业知识。 - salathe
有时候很难说某个东西是“更好”还是不好,因为大多数情况下这完全取决于其周围的上下文。如果您想知道某个东西是否适合您的用例,您应该简单地对其进行分析。此外,当一个东西只是一个多维数组时,将其称为“数组”会让人感到困惑。 - Stephan-v
2
@Stephan-v “更好”并不总是指性能更好。 - Xatenev
你说得对,我之所以朝那个方向去想,是因为最后一个问题:“这是关于性能的吗?” - Stephan-v
很抱歉出现了两个7,那是个错误。但还是感谢你的经验 :) - Romain Sickenberg
1个回答

12
  1. 更少的代码。
  2. 代码更易理解,因为这正是 array_values 的作用,而您的 foreach 可能会做任何事情,除非您阅读并理解它。
  3. array_values 是一个原生的 PHP 函数,在后台使用 C 实现,并且很可能比自定义的 PHP 代码更具有性能优势。

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