2010-03-30 8 views
1

Je suis un (complet) php noob et ai besoin d'un peu d'aide pour quelque chose.php question concernant les tableaux

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

"Cat1","Cat2","Cat3" 

... et ainsi de suite. L'utilisateur peut sélectionner jusqu'à 6 catégories sur ce formulaire.

Ce que je dois: même si mon résultat est 3 catégories que je dois avoir 6 « cellules » - faute d'un meilleur mot - même si elles sont vides:

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

J'ai essayé ce :

<?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 obtenir de celui-ci:

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

Est-ce que ce sens?

Merci Martin

Répondre

6

Si vous avez un tableau qui contient 6 éléments, dont 3 chaînes vides:

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

Vous pouvez 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, en utilisant un séparateur - ici, le séparateur est "," qui est ce que vous pouvez entre vos cordes.

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


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



EDIT après le commentaire:

OK, si votre tableau $arr ne contient 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 celui-ci, par exemple:

$count = count($arr); 

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

Et puis, les ajouter à la gamme $arr:

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

(Vous pouvez également utiliser array_merge, je suppose)

Et maintenant , retour à notre implode:

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

Et, cette fois encore, vous obtenez:

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


Voici ce que l'var_dump($padding); donne, pour information:

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

Et, oui, vous pouvez utiliser le + operator with arrays(citant):

L'opérateur + ajoute des éléments de les clés restantes du droitier remis à gauche, tandis que les clés dupliquées ne sont PAS remplacées.


Si votre $arr pourrait être plus de 6 éléments, vous pouvez utiliser array_slice pour supprimer les éléments un-voulu:

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

Salut Pascal, Merci pour votre réponse. Je ne vais pas obtenir les chaînes vides au départ. je pourrais obtenir: CAT1, CAT2, CAT3 ou CAT1, CAT2, CAT3, cat4, CAT5 Dans les deux cas, je besoin que la sortie soit plus de 6 articles. – Martin

+0

@Martin: J'ai édité ma réponse avec quelques informations supplémentaires et un exemple :-) –

1

Vous pouvez 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",""

+0

@codaaddict Merci beaucoup pour cela. C'est le plus proche de quelque chose qui fonctionne. Cependant, si mes résultats initiaux sont supérieurs à 4 catégories, je n'obtiens aucun résultat. – Martin

+0

@Martin: fonctionne pour moi..J'ai mis à jour mes ans. – codaddict

+0

Avec moins de 6 c'est le cas. Mais avec 6, ce n'est pas le cas. – Martin