注意:在PHP中尝试增加关联数组时,未定义索引



每次出现重复变量时,我都会尝试增加$variable的值。我不确定这在语法上是否正确,但我认为这在语义上是正确的。var_dump似乎吐出了正确的输出,但我得到了以下错误:注意:未定义的索引。。。

$newarray = array();
foreach ($array as $variable)
{
    $newarray[$variable]++; 
    var_dump($newarray);
}

$array=(0=>h,1=>e,2=>l,3=>l,4=>o(;

目标:

'h' => int 1
'e' => int 1
'l' => int 2
'o' => int 1

我的代码是有效的,只是我收到了一些奇怪的通知。

$newarray = array();
foreach ($array as $variable)
{
    if (!isset($newarray[$variable])) {
        $newarray[$variable] = 0;
    }
    $newarray[$variable]++;
}

看看函数array_count_values((。它正是你想要做的。

php.net中的示例:

$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));

结果:

Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)

在现代PHP中,可以通过利用null合并运算符来避免isset()调用。在下面的代码段中,如果变量尚未声明,则该技术将该变量设置为0。然后,您可以自由使用一系列简写操作,如串联、算术等。

$new = [];
foreach ($array as $v) {
    $new[$v] = ($new[$v] ?? 0) + 1;
}

或者,如果您想继续使用++,则可以使用";空合并赋值运算符";。如果变量已经声明,则赋值右侧的逻辑甚至不会执行。下面的代码段将与上面的代码段执行相同的操作。

$new = [];
foreach ($array as $v) {
    $new[$v] ??= 0;
    ++$new[$v];
}
<?php
$newarray = array();
foreach ($array as $variable) {
    if ( !array_key_exists($variable, $newarray) ) {
        $newarray[$variable] = 0;
    }
    ++$newarray[$variable];
}
var_dump($newarray);

但是您也可以使用array_count_values((。

$newarray = array();
foreach ($array as $variable)
{
    if(!isset($newarray[$variable]))
      $newarray[$variable] = 0;
      $newarray[$variable]++; 
    var_dump($newarray);
}

如果增加了错误的东西,请尝试以下操作:

foreach ($array as $key => $variable) {
   $array[$key]++; 
   var_dump($array);
}

最新更新