此代码:
$argh[0]= "nada";
$argh[1]= "A";
$argh[2]= "B";
$argh[3]= "C";
$argh[4]= "D";
for ($i=0;$i < sizeOf($argh);$i++){
echo "THE CONTENT AT INDEX ". $i . " IS " . $argh[$i];
echo "<br>";
}
产生此输出:
THE CONTENT AT INDEX 0 IS NADA
THE CONTENT AT INDEX 1 IS A
THE CONTENT AT INDEX 2 IS B
THE CONTENT AT INDEX 3 IS C
THE CONTENT AT INDEX 4 IS D
使用,
unset($argh[3]);
$argh = array_values($argh);
然后输出变为
THE CONTENT AT INDEX 0 IS NADA
THE CONTENT AT INDEX 1 IS A
THE CONTENT AT INDEX 2 IS B
THE CONTENT AT INDEX 3 IS D
这是正确的。我将相同的方法应用于$ _SESSION数组,但效果不同。最初,我的$ _SESSION ['sesh']输出为:
THE CONTENT AT INDEX 0 IS NADA
THE CONTENT AT INDEX 1 IS A
THE CONTENT AT INDEX 2 IS B
THE CONTENT AT INDEX 3 IS C
THE CONTENT AT INDEX 4 IS D
但执行后
unset($_SESSION['sesh'][3]);
$_SESSION['sesh'] = array_values($_SESSION['sesh']);
输出变为
THE CONTENT AT INDEX 0 IS A
THE CONTENT AT INDEX 1 IS B
THE CONTENT AT INDEX 2 IS D
THE CONTENT AT INDEX 3 IS NADA
将unset($ x)应用于会话数组似乎导致删除索引$ x处的元素,但由于某种原因,它还将索引0处的值传递给索引$ x - 1.任何人都知道为什么这是发生?
答案 0 :(得分:2)
PHP中的数组与...中的数组不同。 C.
你的数字索引/关键字没有说明&#34; location&#34;在数组中,它只是&#34;只是&#34;像#foo&#39;,&#39; bar&#39;等关键字,如果你从头到尾遍历它,它不会影响数组的顺序。
e.g。
$argh = array();
$argh[1]= "A";
$argh[2]= "B";
$argh[3]= "C";
$argh[4]= "D";
$argh[0]= "nada";
// foreach iterates the array from start to end
foreach( $argh as $key=>$value ) {
echo $key, ' ', $value, "\r\n";
}
打印
1 A
2 B
3 C
4 D
0 nada
即。 是一个键0
,但其对应的值仍然是数组中的最后一个元素。
array_values()
像foreach一样迭代数组,有点像
$values = array(); $cnt = 0;
foreach( $argh as $value ) {
$values[$cnt++] = $value;
}
print_r($values);
所以,你的元素&#34; nada&#34;获得最高密钥,因为它是数组中的最后一个元素
...而unset
在数组中间的元素并不影响它。
所以,你的问题并不是关于$ _SESSION&#34;&#34;但是关于如何将元素添加到_SESSION。