1

假设我有这样的数据字符串......

one=1&two=2&three=3&four=4&two=2

我正在使用 phpforeach来获取键/值并在这一点上对我的需要进行排序

foreach($_POST as $key => $value) {
   if ($key == "two") {
    // $result = Take $value and add it to the previous $value .",";
   }
}

我试图达到的目标是如何获取重复的键并添加循环中生成的先前值。例如:解决方案是$result = 2,2,

4

5 回答 5

1

如果您将POST问题中的字符串发送到服务器,您只会看到 的一个值two,而不是两者。第二个将覆盖第一个值。

如果您想要一个键的多个值,您可以使用[].

one=1&two[]=2&three=3&four=4&two[]=2

现在,$_POST['two']将是一个数组(onethree并且four将是字符串)。

于 2012-05-22T20:57:09.117 回答
1

这行不通。您只能从 POST、GET 和 REQUEST 获得最后一个值。你需要解析 $_SERVER['QUERY_STRING'],如果你解析了它,你可以迭代你的数组:

foreach(explode('&',$_SERVER['QUERY_STRING']) as $k => $v)
{
 $val = explode('=',$v);
 $result[$val[0]] = isset($result[$val[0]]) ? $result[$val[0]].','.$val[1]:$val[1];
}
于 2012-05-22T20:59:04.297 回答
1
//initial data string
$string = "one=1&two=2&three=3&four=4&two=2";

$results = array();

$data = explode('&', $string);

foreach($data as $param) {

    $query = explode('=', $param);

    $key = $query[0];
    $value = $query[1];

    // check to see if the key has been seen before. 
    // if not, store it in an array for now.
    if(!isset($results[$key])){
        $results[$key] = array($value);
    }
    else{
        // the key is a duplicate, store it in the array
        $results[$key][] = $value;
    }

}

// implode the arrays so that they're in the $result = "2,2" format
foreach($data as $key => $value){
    $data[$key] = implode(',', $value);
}

也有人提到过,但如果这是来自服务器帖子,那么您将不会获得重复的密钥。

于 2012-05-22T21:03:19.523 回答
1

牢记Rocket关于多个 POSTed 值的建议,您可以implode()在任何到达的数组上使用:

foreach($_POST as $key=>$value)
{
    if(is_array($value))
        $_POST[$key]=implode(',',$value);
}

获取您似乎想要的字符串值。

于 2012-05-22T21:09:04.853 回答
0

将它们作为数组存储在 foreach 循环之外。

$keys = [];
foreach($_POST as $key => $value) {
   if ($key == "two") {
     $keys[] = $value;
   }
}
return $keys
于 2012-05-22T20:55:39.777 回答