为什么PHP松散数组的项值?

时间:2017-02-13 12:39:13

标签: php arrays

我的数组包含值:

$array1 = array('Boss', 'Lentin', 'Endless'); 
print_r ($array); 

结果将是:

Array ( [0] => Boss [1] => Lentin [2] => Endless

没关系。

但是,如果我用一个键向这个数组添加两个元素,那么“Boss”元素将会丢失。

$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless');
print_r ($array2);

结果将是:

Array ( [1] => Doctor [2] => Lynx [3] => Lentin [4] => Endless ) 
//Where is "BOSS"???

为什么?

6 个答案:

答案 0 :(得分:8)

当php创建数组时,在索引1中设置Doctor,在索引2中设置Boss,但是2=>'Lynx'会导致php覆盖索引2并在其中设置Lynx

您可以在设置索引后设置它或使用索引。例如

$array2 = array("1"=>'Doctor', 2=>'Lynx', 'Boss', 'Lentin', 'Endless');
// or 
$array2 = array("1"=>'Doctor', 2=>'Boss', 3=>'Lynx', 'Lentin', 'Endless');

答案 1 :(得分:5)

当创建$ array时,'Boss'将首先存储在索引2 (Array([2] =>'Boss')中,后来被'Lynx'覆盖

答案 2 :(得分:3)

您的问题是索引键

$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless');
print_r ($array2);

这是因为,在索引1上它已经是医生,老板将是第二名,这将被Lynx取代,其中指数为2,其中boss将被替换。

我希望我很清楚。

答案 3 :(得分:3)

这是php的预期行为(参见http://php.net/manual/en/language.types.array.php#example-57)。如果您需要数组中的所有值并且不需要使用键,我建议使用array_push($array $value)。否则,您应该使用其键添加所有值,并记住,对于PHP 1"1"true是相同的值,因此它们将相互覆盖。

答案 4 :(得分:2)

array()是一个带有表示文字数组的动态参数的构造。将给定值分配给阵列结构是顺序,即从左到右逐个完成。在您的示例中:

  1. Doctor已分配给索引1。
  2. Boss被分配到索引2。
  3. Lynx会覆盖索引2.
  4. LentinEndless分别分配给索引3和4。

答案 5 :(得分:1)

  嘿@Weltkind首先我建议你阅读   " http://php.net/manual/en/language.types.array.php",

现在回答你的答案在php中,数组键可以是字符串或整数,如果你没有提到键那么 设置默认整数,下一个数组键的值取决于前一个数组整数键意味着

下一个数组键=上一个整数键+ 1;

在PHP数组中,相同的键值将被相同的键覆盖

  

现在让我们了解你的array2:

<?php
$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless');
  

1)当您使用键&#34; 1&#34;启动数组时所以

     

所以对于第一个键值是[1] =&gt; &#39;医生&#39;

     

当前数组如:array([1] =&gt;&#39; Doctor&#39;)

now next key =上一个整数键(即1)+ 1 = 2;

  

2)对于第二键值是[2] =&gt; &#39; BOSS&#39;

     

当前数组如:array([1] =&gt;&#39; Doctor&#39;,[2] =&gt;&#39; BOSS&#39;)

     

3)下一个键=前一个整数键(即2)+ 1 = 3它将携带   到下一个键但是下一个键是[2] =&gt; &#39;山猫&#39;就像你提到的那样   key [2]该值将被值覆盖&#39; BOSS&#39;到了Lynx&#39 ;;当前   数组如:array([1] =&gt;&#39; Doctor&#39;,[2] =&gt;&#39; Lynx&#39;)

现在我们的下一个关键是[3]

  

4)对于下一个值,键是[3] =&gt; &#39; Lentin&#39;

     

当前数组如:array([1] =&gt;&#39; Doctor&#39;,[2] =&gt;&#39; Lynx&#39;,[3] =&gt;   &#39; Lentin&#39);

     

now next key =上一个整数键(即3)+ 1 = 4;

     

5)对于下一个值,键是[4] =&gt; &#39;无尽&#39;

     

当前数组如:array([1] =&gt;&#39; Doctor&#39;,[2] =&gt;&#39; Lynx&#39;,[3] =&gt;   &#39; Lentin&#39;,[4] =&gt; &#39;无尽&#39);

这就是最终数组如下所示的原因:

array(
        [1] => 'Doctor', 
        [2] => 'Lynx', 
        [3] => 'Lentin', 
        [4] => 'Endless'
    );