4

我试图理解这段代码:

<?php 

$list = array(-10=>1, 2, 3, "first_name"=>"mike", 4, 5, 10=>-2.3); 

print_r(array_keys($list));
?> 

输出:

Array ( [0] => -10 [1] => 0 [2] => 1 [3] => first_name [4] => 2 [5] => 3 [6] => 10 ) 

我想知道为什么[4] => 2 and why [5] => 3我认为会是[4] => 4 and [5] => 5因为它们都在索引 4 和 5 处。我对这个数组中到底发生了什么有点困惑,如果可能的话,有人能指出我正确的方向,谢谢。

4

5 回答 5

6

您将键控与无键数组条目混合在一起,所以它有点不稳定:

$list = array(
    -10 => 1   // key is -10
        => 2  // no key given, use first available key: 0
        => 3  // no key given, use next available key: 1
    "first_name" => "mike" // key provided, "first_name"
        => 4  // no key given, use next available: 2
        => 5  // again no key, next available: 3
     10 => -2.3  // key provided: use 10

如果您不提供密钥,PHP 将从 0 开始分配一个密钥。如果潜在的新密钥与已分配的密钥冲突,则将跳过该潜在密钥,直到 PHP 找到可以使用的密钥。

于 2014-05-02T15:13:38.657 回答
1

这很正常,因为 PHP 正在等待密钥。

$list = array(-10=>1, 2, 3, "first_name"=>"mike", 4, 5, 10=>-2.3); 

而且您没有在 2,3,4,5 中给他,所以它给出了一个自动键。

所以 ==> [0] => 2、[1] => 3、[2] => 4 和 [3] => 5。

于 2014-05-02T15:15:33.993 回答
1

尝试这个:

$list = array(-10=>1, 2 => null, 3=> null, "first_name"=>"mike", 4=> null, 5=> null, 10=>-2.3);

得到你想要的结果,所以 2、3、4 和 5 将被视为键而不是值

于 2014-05-02T15:14:07.410 回答
0

在您的阵列中,您只key => valuevalue.

-10 是你的第一把钥匙。然后因为您没有为以下项目定义键,所以它会自动按顺序分配。

于 2014-05-02T15:11:47.737 回答
0

似乎在未设置键时,array_keys会跟踪分配的最后一个键并将分配连续编号:

array(7) {
  [0]=>
  int(-10)
  [1]=>
  int(0)   // first without key (starting on 0)
  [2]=>
  int(1)   // second without key
  [3]=>
  string(10) "first_name"
  [4]=>
  int(2)  // third without key 
  [5]=>
  int(3)  // fourth without key
  [6]=>
  int(10)
}
于 2014-05-02T15:20:31.330 回答