0

我通常用 Python、Java 或 C 编写代码。我正在使用 PHP 进行一个项目,并且正在阅读 PHP 中的数组,但我完全感到困惑。如果我理解正确,PHP 中的数字索引不一定对应于位置,而只是 Python 中的 dict 中的键。所以,当你打乱一个 PHP 数组时,元素的顺序会改变,但它们的键将保持不变。因此,在调用 时array[9],如果 shuffle 以这种方式对元素进行排序,您实际上可能会获得数组的第一个元素。这引发了一系列问题:

  • 那么,PHP 数组是否总是某种有序的哈希表?这对开销意味着什么?在 Python 中,列表的功能类似于经典的数组数据结构,而字典则更像散列结构。PHP 似乎通过为每个值分配唯一键并跟踪这些值的顺序来将两者结合起来。如果我想使用关联数组结构进行恒定时间查找,由于这种排序开销,我是否比使用 Python 字典更糟糕?是否有只有数组或只有哈希表的 PHP 数据结构?

  • 当你从一个编号的 PHP 数组中删除一个值时会发生什么?如果我有一个数组,[1, 2, 3, 4, 5]我从数组中删除 4,然后尝试访问array[3],它是否会给我一个错误,因为我
    删除了带有键 3 的元素?
    或者 PHP在这种情况下是否会进行某种键调整?

  • 如果您更改数组的顺序(即,通过排序或
    随机播放),唯一的方法是让索引对应于使用 .
    将数组复制到新数组的位置array_values()

4

1 回答 1

2
  1. http://php.net/manual/en/class.splfixedarray.php
  2. 这段代码:

    $arr = array(0,1,2,3,4);
    unset($arr[3]);
    echo $arr[3];  // undefined index warning, execution continues;
    echo isset($arr[3]) ? $arr[3] : '';
    print_r($arr);
    

    print_r()输出:

    Array
    (
        [0] => 0
        [1] => 1
        [2] => 2
        [4] => 4
     )
    
  3. 取决于您选择的功能。有些维护索引关联,有些不维护。

专家提示:

  • 永远不要期望两个看似相似的 PHP 函数的行为彼此相似。这是编程语言的“英语”:充满了从其他语言窃取的废话和大量相互矛盾的约定,但每个人都说它,所以跳上自由列车。

    '穆尔卡。

于 2013-02-27T16:26:59.160 回答