【问题标题】:How does foreach traverse array?foreach 是如何遍历数组的?
【发布时间】:2012-12-11 17:51:05
【问题描述】:

根据我发现的foreach 以添加元素的顺序遍历数组。看这段代码:

$array = array();
$array[0] = "me0";
$array[1] = "me1";
$array[2] = "me2";
$array[4] = "me4";
$array[5] = "me5";

//changing
$array[3] = "me3Changed";

foreach($array as $item)
{
    echo $item.'<br />';
}

echo '<br />';
ksort($array);

foreach($array as $item)
{
    echo $item.'<br />';
}

哪个输出:

me0
me1
me2
me4
me5
me3Changed

me0
me1
me2
me3Changed
me4
me5

这表明数组没有以某种方式遍历for($i;$i&lt;$arrayLength;$i++) 它是如何遍历的?假设 php 是用 C++ 编写的,它应该使用一些这样做的 C++ 函数。 谁能给我解释一下foreach 是如何遍历数组的?


按索引遍历数组的 C++ 示例:
std::string arr[10]; 
arr[0] = "me0";
arr[1] = "me1";
arr[2] = "me2";
arr[4] = "me4";
arr[5] = "me5";

//changing
arr[3] = "me3Changed";

for(int x = 0; x < 6;x++)
{
    std::cout << arr[x] << std::endl;
}

【问题讨论】:

标签: php arrays


【解决方案1】:

PHP 数组是有序键值存储。这意味着键有一个顺序,即它们被添加到数组中的顺序(或拼接在一起或排序或任何确定顺序)。 foreach 以这种固有的内置顺序遍历数组。

我不知道这是否与 C 中的任何内容相比。PHP 的数组是其更独特的功能之一。大多数语言都有键值存储(字典/哈希)有序数组(列表)。 PHP 将 有序键值存储 作为其唯一的数组类型。

【讨论】:

    【解决方案2】:

    数组是在您添加键/值对时形成的,请看here。因此,foreach 也按该顺序遍历。

    然而,您将它与循环 for($i;$i&lt;$arrayLength;$i++) 进行比较,您在其中指定 index,因此,它总是会搜索该键,然后打印其对应的值。

    编辑: Example 解释上述内容。

    【讨论】:

    • 你能用 PHP 或 C++ 写一个简单的 foreach 函数给我解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 2013-12-16
    • 2014-07-31
    • 1970-01-01
    • 2012-06-21
    • 2016-04-06
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多