带有$ _GET的PHP array_combine不会返回所有数组值

时间:2015-06-16 12:36:08

标签: php arrays

我有一个表单,它将状态 id 作为数组提交给update.php。以下是提交表单输入和发送的URL

<? echo"<input type='hidden' name='status[]' value='$status' />"; ?>
<? echo"<input type='hidden' name='id[]' value='$id' />"; ?>

update_pnr.php?status%5B%5D=0&id%5B%5D=4&status%5B%5D=0&id%5B%5D=5

应该更新传入信息的PHP是:

$newarr = array_combine($_GET['status'],$_GET['id']);
foreach($newarr as $index => $value){
    echo 'index: ' . $index . 'Value: ' . $value . '<br>';
}

我在期待:

0 Value: 4
0 Value: 5

但第一行被忽略,我只收到最后一行。那是为什么?

2 个答案:

答案 0 :(得分:2)

至于文档array_combine

使用keys数组中的值作为键创建数组,将values数组中的值作为相应的值。

http://php.net/manual/en/function.array-combine.php

第一个参数数组的值用作键,第二个参数数组的值用作值

$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);

输出:

Array
(
    [green]  => avocado
    [red]    => apple
    [yellow] => banana
)

您的方案是:

您的数组$_GET['status']

Array(
            [0] => 0
            [1] => 0
        )

数组$_GET['id']

Array
        (
            [0] => 4
            [1] => 5
        )

结合后变为:

Array
(
    [0] => 5
)

因为数组状态具有两次相同的值,这是组合数组的键。由于key是唯一的,因此用最后一个值覆盖:

$newarr[0] => 4然后$newarr[0] => 5

$newarr[0] => 4覆盖

$newarr[0] => 5

$newarr只有一个键和值。

Live analysis

答案 1 :(得分:1)

可能的解决方法:

foreach($_GET['status'] as $key => $val)
   echo $val . 'Value: ' . $_GET['id'][$key];