Agregar valor anterior en foreach - PHP
Frecuentes
Visto 263 veces
1
Digamos que tengo una cadena de datos como esta...
one=1&two=2&three=3&four=4&two=2
estoy usando php foreach
para tomar la clave/valor y ordenar cómo lo necesito en este punto
foreach($_POST as $key => $value) {
if ($key == "two") {
// $result = Take $value and add it to the previous $value .",";
}
}
El objetivo que estoy tratando de alcanzar es cómo tomo las claves duplicadas y agrego el valor anterior generado en el ciclo. Por ejemplo: La solución sería $result = 2,2,
5 Respuestas
1
Si estás en POST
Al enviar la cadena en la pregunta a su servidor, solo vería un valor de two
, no ambos. El segundo sobrescribiría el primer valor.
Si desea múltiples valores para una clave, puede convertirla en una matriz utilizando []
.
one=1&two[]=2&three=3&four=4&two[]=2
Ahora, $_POST['two']
será una matriz (one
, three
y four
serán cadenas).
contestado el 22 de mayo de 12 a las 21:05
1
Esto no funcionará. Solo obtiene el último valor de POST, GET y REQUEST. Debe analizar el $_SERVER['QUERY_STRING'], y si lo analizó, puede iterar su matriz:
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];
}
contestado el 22 de mayo de 12 a las 21:05
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);
}
También se ha mencionado, pero si esto proviene de una publicación del servidor, no obtendrá claves duplicadas.
contestado el 22 de mayo de 12 a las 22:05
¿No necesitas también explotar en =
? - Cohete Hazmat
Sí, no había ningún signo de interrogación en la pregunta, así que lo dejé fuera de la respuesta, pero si tenía uno allí, debería quitarlo para que esto funcione: Cambio de contexto
No, quise decir que tienes que hacer list($key, $value) = explode('=', $value)
. (Estaba tratando de decir que necesitas explotar el signo igual. El signo de interrogación era porque estaba haciendo una pregunta :-P) - Cohete Hazmat
1
Teniendo en cuenta El consejo de Rocket sobre múltiples valores publicados, podría usar implode()
en cualquier matriz que llegue:
foreach($_POST as $key=>$value)
{
if(is_array($value))
$_POST[$key]=implode(',',$value);
}
para obtener el valor de cadena que parece estar buscando.
contestado el 23 de mayo de 17 a las 13:05
0
Almacénelos como una matriz fuera del bucle foreach.
$keys = [];
foreach($_POST as $key => $value) {
if ($key == "two") {
$keys[] = $value;
}
}
return $keys
contestado el 22 de mayo de 12 a las 21:05
No puede tener dos claves iguales en una matriz. Este código podría simplificarse hasta $keys = $_POST['two']
(esto sería una cadena, no una matriz). - Cohete Hazmat
Para su información, en php no necesita inicializar una matriz fuera de un foreach para tener acceso a la matriz. Simplemente agregue cosas a la matriz y devuélvala cuando haya terminado. - clasicojonesynz
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php or haz tu propia pregunta.
Si
POST
envió eso a su servidor, solo vería unotwo
, no vería ambos valores. - Rocket HazmatOye, para obtener acceso a la estructura de nombres de cualquier matriz, es decir, $_POST o $myarray, usa print_r y .php.net/manual/en/function.print-r.php> - classicjonesynz