0

是)我有的:

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

...注意键/值颠倒了,键丢失了。

我的问题:

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

4

3 回答 3

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 分配给第二个变量)。

于 2013-04-26T05:27:08.297 回答
1

试试这个

foreach($_SESSION['post'] as $key =>$val) {
     echo "Key:".$key;
     echo "val:".$val;
 }

在您的情况下,您只是试图遍历数组值

foreach($_SESSION['post'] as $array)

您需要上述代码来检索密钥。

于 2013-04-26T05:27:25.440 回答
1

为什么第一种方法不起作用

while (list($key,$value) = each($_SESSION)){ 

因为您有多维数组,并且您正在分配数组 try 并且post是子数组 try 的键

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并且内部数组指针提前一个(所以在下一次迭代中,您将查看下一个元素)。

所以它不会让你得到关键(实时结果)所以改为使用

foreach($_SESSION['post'] as $key=>$value)
{
    echo "<strong>Key:</strong> ".$key." <strong>Value:</strong> ".$value."<br />";
} 

$key上面将在每次迭代时将当前元素的键额外分配给变量。

于 2013-04-26T05:55:55.267 回答