Pregunta

Soy un noob (completo) PHP y necesito un poco de ayuda con algo.

Estoy trabajando en un proyecto por el cual un usuario puede seleccionar hasta 6 categorías a través de un formulario (estoy usando ExpressionEngine). La salida es así:

"Cat1","Cat2","Cat3"

...y así. El usuario puede seleccionar hasta 6 categorías en ese formulario.

Lo que necesito: incluso si mi resultado es 3 categorías, necesito tener 6 'celdas', por falta de una mejor palabra, incluso si están vacías:

"Cat1","Cat2","Cat3","","",""

He probado esto:

<?php
$str = '(output goes here)';
print_r(explode(',', $str, 6));
?>

... pero la salida me da:

Array
(
[0] => Cat1
[1] => Cat2
[2] => Cat3
[3] =>
[4] =>
[5] =>

)

¿Cómo llego de eso a esto?

"Cat1","Cat2","Cat3","","",""

¿Esto tiene sentido?

Gracias Martin

No hay solución correcta

Otros consejos

Si tiene una matriz que contiene 6 elementos, incluidas 3 cuerdas vacías:

$arr = array('cat1', 'cat2', 'cat3', '', '', '');

Puedes implode aquellos en una cuerda, de esta manera:

echo '"' . implode('","', $arr) . '"';

Y obtendrás la siguiente salida:

"cat1","cat2","cat3","","",""


Básicamente, implode le permite poner todos los elementos de la matriz en una cadena, usando un separador; aquí, el separador es "," que es lo que puedes entre tus cuerdas.

Y, como la implosión solo coloca el separador entre elementos, tenemos que poner una adición " al principio y al final de la cadena resultante.


(Espero haber entendido lo que quisiste decir ...)



Editar después del comentario:

Ok, si tu $arr La matriz no contiene seis elementos al principio:

$arr = array('cat1', 'cat2', 'cat3');

Una posibilidad podría ser crear una matriz con elementos vacíos; así, por ejemplo:

$count = count($arr);

// Create an array with empty elements
$padding = array_fill($count, 6-$count, '');
var_dump($padding);

Y, entonces, agrégalos al $arr Matriz:

// Add the empty elements to $arr
$arr = $arr + $padding;

(También podrías usar array_merge, Supongo)

Y, ahora, de vuelta a nuestro implode :

echo '"' . implode('","', $arr) . '"';

Y, esta vez de nuevo, obtendrás:

"cat1","cat2","cat3","","",""


Esto es lo que el var_dump($padding); Da, para información:

array
  3 => string '' (length=0)
  4 => string '' (length=0)
  5 => string '' (length=0)

Y sí, puedes usar el + operador con matrices (citando) :

los + El operador agrega elementos de las teclas restantes desde la matriz de mano derecha a la mano izquierda, mientras que las teclas duplicadas no se sobrescriben.


Si tu $arr podría ser más largo de 6 elementos, podría usar array_slice Para eliminar los elementos no deseados:

$arr = array('cat1', 'cat2', 'cat3', '', '', '', '');
$arr = array_slice($arr, 0, 6);
echo '"' . implode('","', $arr) . '"';

Puedes probar:

$org = '"Cat1","Cat2","Cat3"';
$arr = explode(',',$org);
$arr = array_merge($arr,array_fill(count($arr),6-count($arr),'""'));
$str = implode(',',$arr);
echo($str); // prints "Cat1","Cat2","Cat3","","",""

Funciona incluso cuando $org posee 6 o menos gatos:

Si $org = "Cat1","Cat2","Cat3","cat4","cat5"

$str estarán "Cat1","Cat2","Cat3","cat4","cat5",""

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top