我有一个我从表单输入创建的会话数组。这是var_dump():
array(1) { ["post"]=> array(4) { [671]=> string(1) "1" [672]=> string(1) "2" [673]=> string(1) "3" [537]=> string(1) "4" } }
出于测试目的,我需要按如下方式输出数组:
Key: 671 Value: 1
Key: 672 Value: 2
Key: 673 Value: 2
Key: 537 Value: 4
我实际上正在做的是使用每个密钥进行SQL查询,例如WHERE id =“671”或id =“672”等。
while (list($key,$value) = each($_SESSION)){
echo "<strong>Key:</strong> ".$key." <strong>Value:</strong> ".$value."<br />";
}
......产生:
Key: post Value: Array
我也试过了:
foreach($_SESSION['post'] as $array)
{
list($key,$value) = $array;
echo "<strong>Key:</strong> ".$key." <strong>Value:</strong> ".$value."<br />";
}
......产生:
Key: 1 Value:
Key: 2 Value:
Key: 2 Value:
Key: 4 Value:
...注意键/值被反转,键丢失了。
如何正确输出(循环)会话数组的键和值?
答案 0 :(得分:3)
尝试:
foreach($_SESSION['post'] as $key=>$value)
{
echo "<strong>Key:</strong> ".$key." <strong>Value:</strong> ".$value."<br />";
}
当您使用此结构时:
foreach($_SESSION['post'] as $array)
循环不会查看键,因此$ array每次都会等于一个特定的值(因此list方法会将该值赋给第一个变量,并将null赋值给第二个变量)。
答案 1 :(得分:1)
试试这个
foreach($_SESSION['post'] as $key =>$val) {
echo "Key:".$key;
echo "val:".$val;
}
在你的情况下,你只是试图遍历数组值
foreach($_SESSION['post'] as $array)
您需要上述代码来检索密钥。
答案 2 :(得分:1)
为什么第一种方法不起作用
while (list($key,$value) = each($_SESSION)){
因为你有多维数组并且你正在分配数组try而post
是子数组的关键尝试
while (list($key,$value) = each($_SESSION['post'])){
echo "<strong>Key:</strong> ".$key." <strong>Value:</strong> ".$value."<br />";
}
为什么第二种方法不起作用
让我们看看您的代码首先执行的操作
foreach($_SESSION['post'] as $array)
第一个表单循环遍历$_SESSION['post']
给出的数组。在每次迭代中,当前元素的值被赋值给$array
,内部数组指针被提前一个(因此在下一次迭代中,您将看到下一个元素)。
因此它不会让你获得密钥(live result)所以改为使用
foreach($_SESSION['post'] as $key=>$value)
{
echo "<strong>Key:</strong> ".$key." <strong>Value:</strong> ".$value."<br />";
}
上面还将在每次迭代时将当前元素的键分配给$key
变量。