Sin foreach , ¿cómo puedo convertir una matriz como esta?
array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");
a una cuerda como esta
item1='object1', item2='object2',.... item-n='object-n'
Ya lo pensé implode()
, pero no hace que la llave implosione.
Si foreach es necesario, ¿es posible no anidar el foreach?
EDITAR: he cambiado la cadena
EDIT2 / ACTUALIZAR: Esta pregunta se hizo hace bastante tiempo. En ese momento, quería escribir todo en una línea para usar operadores ternarios y anidar llamadas de función integradas a favor de foreach. ¡Esa no fue una buena práctica! Escribir código que sea legible, ya sea conciso o no, no importa mucho.
En este caso: poner foreach en una función será mucho más legible y modular que escribir una sola línea (¡aunque todas las respuestas son geniales!).
Respuestas:
y de otra manera:
o:
fuente
echo "Hello, World!";
¿Debería ver ejemplos de código de esas funciones?array_fill(0, $input, 'selected-value-you want-to-check-against');
Esto generará una matriz del mismo tamaño con un valor único para todas las filas.Podrías usar http_build_query , así:
Salida:
Manifestación
fuente
http_build_query
.http_build_query
enurldecode
evitarlo.Pasé medidas (100000 iteraciones), ¿qué forma más rápida de pegar una matriz asociativa?
Objetivo: Obtener una línea de 1000 artículos, en este formato: "clave: valor, clave2: valor2"
Tenemos una matriz (por ejemplo):
Prueba número uno:
Utilice http_build_query y str_replace :
Tiempo promedio para implosionar 1000 elementos: 0.00012930955084904
Prueba número dos:
Utilice array_map e implosionar :
Tiempo promedio para implosionar 1000 elementos: 0.0004890081976675
Prueba número tres:
Utilice array_walk e implosionar :
Tiempo promedio para implosionar 1000 elementos: 0.0003874126245348
Prueba número cuatro:
Utilice foreach :
Tiempo promedio de implosión de 1000 elementos: 0.00026632803902445
Puedo concluir que la mejor manera de pegar la matriz es usar http_build_query y str_replace
fuente
$s = ''; foreach ($array as $k=>$v) { if ($s !== null) { $s .= ','; } $s .= "{$k}:{$v}"; }
supera a todos los demás.substr(str_replace('"', '', json_encode($headers)), 1, -1);
http_build_query
reemplaza con espacios más (+
carácter).Yo usaría
serialize()
ojson_encode()
.Si bien no le dará la cadena de resultado exacta que desea, sería mucho más fácil codificar / almacenar / recuperar / decodificar más adelante.
fuente
Usando array_walk
IDEONE
fuente
create_function
lugar de simplemente usar una función anónima.Cambio
si desea resive toda la cadena sin el último $ pegamento
Y el uso:
fuente
Para fines de depuración. Escritura recursiva de una matriz de matrices anidadas en una cadena. Usado para cada uno. La función almacena caracteres del idioma nacional.
fuente
También puede usar array_reduce de PHP ,
fuente
Para crear mysql donde las condiciones de la matriz
fuente
También hay var_export y print_r más comúnmente conocidos para imprimir resultados de depuración, pero ambas funciones pueden tomar un argumento opcional para devolver una cadena en su lugar.
Usando el ejemplo de la pregunta como datos.
Usando
print_r
para convertir la matriz en una cadenaEsto generará una representación legible por humanos de la variable.
Saldrá:
Usando
var_export
para convertir la matriz en una cadenaLo que generará una representación de cadena php de la variable.
Saldrá:
Debido a que es un php válido, podemos evaluarlo.
Salidas:
fuente
Aquí hay un ejemplo simple, usando class:
fuente