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、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

複数の POSTed 値に関するRocket のアドバイスを念頭に置いimplode()て、到着した任意の配列で使用できます。

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

あなたが求めていると思われる文字列値を取得します。

于 2012-05-22T21:09:04.853 に答える
1

POST質問の文字列をサーバーに送信している場合、two両方ではなく の 1 つの値のみが表示されます。2 番目の値は最初の値を上書きします。

キーに複数の値が必要な場合は、 を使用して配列にすることができます[]

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

今、$_POST['two']配列になります(onethreeおよびfour文字列になります)。

于 2012-05-22T20:57:09.117 に答える
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 に答える
0

foreach ループの外側に配列として格納します。

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