Question

Je suis un PHP (complet) noob et j'ai besoin d'un peu d'aide avec quelque chose.

Je travaille sur un projet par lequel un utilisateur peut sélectionner jusqu'à 6 catégories via un formulaire (j'utilise ExpressionNengine). La sortie est comme ceci:

"Cat1","Cat2","Cat3"

...etc. L'utilisateur peut sélectionner jusqu'à 6 catégories sur ce formulaire.

Ce dont j'ai besoin: même si mon résultat est 3 catégories, j'ai besoin d'avoir 6 «cellules» - faute d'un meilleur mot - même si elles sont vides:

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

J'ai essayé ceci:

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

... mais la sortie me donne:

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

)

Comment puis-je en tirer à ce sujet:

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

Est-ce que ça a du sens?

Merci Martin

Pas de solution correcte

Autres conseils

Si vous avez un tableau qui contient 6 articles, y compris 3 chaînes vides:

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

Tu peux implode Ceux dans une chaîne, de cette façon:

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

Et vous obtiendrez la sortie suivante:

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


Fondamentalement, implode vous permet de mettre tous les éléments du tableau dans une chaîne, à l'aide d'un séparateur - ici, le séparateur est "," C'est ce que vous pouvez entre vos cordes.

Et, comme implose ne met le séparateur entre les éléments, nous devons mettre un ajout " au début et à la fin de la chaîne résultante.


(J'espère que j'ai compris ce que vous vouliez dire ...)



Modifier après le commentaire:

Ok, si ton $arr Array ne contient pas six éléments au début:

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

Une possibilité pourrait être de créer un tableau avec des éléments vides; comme ça, par exemple:

$count = count($arr);

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

Et ensuite, ajoutez-les au $arr déployer :

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

(Vous pouvez également utiliser array_merge, Je suppose)

Et, maintenant, revenons à notre implode :

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

Et, cette fois encore, vous obtiendrez:

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


Voici ce que le var_dump($padding); Donne, pour plus d'informations:

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

Et, oui, vous pouvez utiliser le + Opérateur avec des tableaux (citant) :

La + L'opérateur ajoute des éléments des clés restantes du tableau droit à gauche, tandis que les clés dupliquées ne sont pas écrasées.


Si ton $arr pourrait être supérieur à 6 éléments, vous pouvez utiliser array_slice Pour supprimer les éléments non détenus:

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

Tu peux essayer:

$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","","",""

Fonctionne même lorsque $org a 6 ou moins de chats:

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

$str sera "Cat1","Cat2","Cat3","cat4","cat5",""

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top