只有 1 个元素的 PHP 关联数组


PHP associative array with only 1 element

我有一个返回数组的函数(结果来自bd)

$resultat = $bd->Select($sql);

对于数组中的每个结果,如果它们不满足要求,我会将它们从数组中删除。

foreach($indexToRemove as $elem)
    unset($resultat[$elem]);

然后,我将数组放入会话数组中

$_SESSION['entrepriseTrouver'] = $resultat;

然后,我将结果显示在页面中

        $nbResultatParPage = 9; // Correspond au nombre de résultats maximale désirés par page
        $index = (($nbResultatParPage*($_SESSION['page'] - 1)) + 1); // Trouve l'index actuel à afficher ( le nombre de résultats par page * le chiffre de la page précédente ) + 1
        $max = $index + $nbResultatParPage; // Correspond a l'index maximum à afficher

        for($index; $index < $max; $index++) // On affiche les entreprises
        {
            echo "<br/>";
            if(isset($_SESSION['entrepriseTrouver'][$index-1]))
            {
                echo "#".$index."<br/>";
                print_r($_SESSION['entrepriseTrouver'][$index-1]);
                echo "<br/>";
                //echo $_SESSION['entrepriseTrouver'][$index-1][3]."<br/>".$_SESSION['entrepriseTrouver'][$index-1][7]."<br/><br/>";
                echo "-------------------------------------------------------------------------------------------------------------------------------";
            }
        }

当我的数组中没有元素或超过 1 个元素时,一切正常,但是当我只有 1 个元素时,我无法使用索引 0 访问它

print_r($_SESSION['entrepriseTrouver'][0]);

我只能使用密钥访问它。例如,我的BD返回20个元素,我取消设置除#17以外的所有元素,我将不得不以这种方式访问它

print_r($_SESSION['entrepriseTrouver'][17]);

我不明白为什么当我的数组中只有 1 个元素时,我无法使用索引 0 访问我的数组。

取消设置数组中的值不会为其重新编制索引。 因此,您只剩下一个值位于索引 17 的数组,仅此而已。

使用array_values来解决此问题。

foreach($indexToRemove as $elem){
    unset($resultat[$elem]);
}
$_SESSION['entrepriseTrouver'] = array_values($resultat);
print_r($_SESSION['entrepriseTrouver'][0]);

当您取消设置数组元素时,您会删除该元素,它是键。因此,如果删除除键 17 处的项目之外的所有项目,则您的一个项目是键 17,键 0 不存在。

解决此问题的快速方法是在将结果分配给会话时对结果运行array_values

$_SESSION['entrepriseTrouver'] = array_values($resultat);

这将返回数组中的所有值并以数字方式编制索引,这具有重新索引数组的效果。 如果数组中只有一个项目,它现在将位于键 0 处。

unset() 不会重置数组键。您可以通过执行以下操作来重置数组键,这会将键重置为从 0 开始递增数字

$_SESSION['entrepriseTrouver'] = array_values($_SESSION['entrepriseTrouver']);

PHP 不会在你从数组中删除元素时重置数组。 仅仅因为数组中只有一个元素并不意味着它是元素 0。 例子:

$x[] = "foo"
echo $x[0] // echos "foo"
$x[0] = "foo"
$x[1] = "bar"
unset($x[0])
echo $x[0] // echos nothing
echo $x[1] // echos "bar"

如果将 $x[5] = "foo"设置为 $x[0],您不会期望 [0] 为 "foo"。