我有一个返回数组的函数(结果来自bd)
$resultat = $bd->Select($sql);
foreach resultat在数组中,如果它们不符合要求,我将它们从我的数组中删除。
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访问我的数组。
答案 0 :(得分:5)
在数组中取消设置值不会重新索引它。所以,你留下一个数组,其值为索引17,就是这样。
使用array_values
来解决此问题。
foreach($indexToRemove as $elem){
unset($resultat[$elem]);
}
$_SESSION['entrepriseTrouver'] = array_values($resultat);
print_r($_SESSION['entrepriseTrouver'][0]);
答案 1 :(得分:4)
取消设置数组元素时,删除该元素并将其键入。因此,如果删除除键17上的项目之外的所有项目,那么您的一个项目是键17,键0不存在。
快速解决此问题的方法是在将结果分配给会话时对结果运行array_values
$_SESSION['entrepriseTrouver'] = array_values($resultat);
这将以数字方式返回数组和索引中的所有值,这会重新索引数组。如果数组中只有一个项目,则它现在位于键0。
答案 2 :(得分:3)
unset()不会重置数组键。您可以通过执行以下操作重置数组键,这将重置键以从0开始递增数字
$_SESSION['entrepriseTrouver'] = array_values($_SESSION['entrepriseTrouver']);
答案 3 :(得分:1)
当您从中删除元素时,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],你不会指望它是“foo”。