PHP:密钥不从会话数组打印

时间:2013-04-26 05:25:28

标签: php arrays session loops

我拥有的:

我有一个我从表单输入创建的会话数组。这是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:

...注意键/值被反转,键丢失了。

我的问题:

如何正确输出(循环)会话数组的键和值?

3 个答案:

答案 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变量。