在foreach中添加以前的值 - PHP

时间:2012-05-22 20:50:36

标签: php

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

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

我正在使用php foreach获取键/值并在此时对我需要的方式进行排序

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

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

5 个答案:

答案 0 :(得分:1)

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

如果您想要一个键的多个值,可以使用[]将其设为数组。

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

现在,$_POST['two']将是一个数组(onethreefour将成为字符串。

答案 1 :(得分: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];
}

答案 2 :(得分: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);
}

此外,它已被提及,但如果这是来自服务器帖子,那么你将不会得到重复的密钥。

答案 3 :(得分:1)

请注意Rocket's advice有关多个POSTed值的内容,您可以在任何到达的数组上使用implode()

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

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

答案 4 :(得分:0)

将它们存储为foreach循环外的数组。

$keys = [];
foreach($_POST as $key => $value) {
   if ($key == "two") {
     $keys[] = $value;
   }
}
return $keys