假设我有这样的数据字符串......
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,
答案 0 :(得分:1)
如果您将问题中的字符串POST
发送到服务器,则只能看到two
的一个值,而不是两者。第二个将覆盖第一个值。
如果您想要一个键的多个值,可以使用[]
将其设为数组。
one=1&two[]=2&three=3&four=4&two[]=2
现在,$_POST['two']
将是一个数组(one
,three
,four
将成为字符串。
答案 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