2009-11-18 3 views
1

C'est ce que j'essaie de faire:Pourquoi les virgules dans ma matrice sont-elles lues comme une chaîne?

1 - J'ai un tableau avec une chaîne.

$photographer_array = "'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'"; 

2 - J'essaie de remplir un tableau avec cette chaîne.

array($photographer_array); 

Ce qu'il fait est de créer un tableau avec une seule entrée, y compris toutes les virgules. Pourquoi lit-il les virgules comme une chaîne? Y at-il de toute façon que je puisse le faire ne pas lire les virgules comme une chaîne et à la place les utiliser pour séparer les valeurs dans le tableau?

Répondre

6

Désolé de le dire, mais vous ne pouvez pas remplir un tableau de cette façon, car les chaînes ne sont généralement pas analysées et exécutées. Tout ce que vous pouvez faire est:

$photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'); 

Ou ce (EDIT: Adapté à votre code de requête):

$photographer_array = array(); 

while ($photographer_row = $result->fetch_assoc()) { 
    $photographer_array[] = $photographer_row['photographer_name']; 
} 

P.S .: Vous aimez juste de longs noms de variables, ne vous? ;)

+0

Merci beaucoup Franz! Ça a bien marché! Désolé de confondre tout le monde. J'aurais dû te montrer ma question tout de suite. Merci pour toutes les réponses rapides! – zeckdude

+0

Ouais im en cours d'exécution de plusieurs requêtes sur cette page, donc je voulais qu'il soit évident de savoir lequel est qui, donc les noms de variables longues. habitude bizarre je suppose – zeckdude

0

Si vous avez accès à PHP> = 5.3.0, vous pouvez utiliser str_getcsv, qui analyse une chaîne séparée par des virgules.

+0

'str_getcsv()' est une fonction PHP> = 5.3.0. Juste pour prendre note de cela. –

+0

Merci Stefan, édité en. –

0

Explode() est ce que vous avez besoin ...

http://php.net/manual/en/function.explode.php

+1

Cela va finir en douleur si les valeurs elles-mêmes contiennent des virgules. –

+0

Également pas la bonne chose pour ce que Chris veut vraiment, bien que vous ne puissiez pas le savoir évidemment ... – Franz

3

C'est parce que $photographer_arrayest une chaîne et en utilisant array($photographer_array) met simplement votre chaîne au tableau.

Peut-être que vous voulez faire:

$photographer_array = explode(',', "'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'"); 

Cela vous donnera

array(3) { 
    [0]=> 
    string(15) "'Alberto Korda'" 
    [1]=> 
    string(18) " 'Annie Leibowitz'" 
    [2]=> 
    string(14) " 'Ansel Adams'" 
} 

Ou vous voulez:

$photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'); 
// ... 

EDIT:

En ce qui concerne le code affiché - ce qui suit vous donnera un tableau de $photographer_row['photographer_name']:

// ... 
$photographer_array = array(); 
while($photographer_row = $result->fetch_assoc()) { 
    $photographer_array[] = $photographer_row['photographer_name']; 
} 
+0

Ouais, c'est exactement ce dont j'avais besoin. Franz vous a battu à ça. Merci de votre aide! – zeckdude

1

Im créant en fait un tableau à l'aide des valeurs d'une requête pour que vous savez pourquoi je fais de cette façon. C'est le code que j'utilise pour créer la chaîne à utiliser dans mon tableau.

$sql = "SELECT photographers.photographer_name 
     FROM photographers 
     ORDER BY photographer_name ASC 
     LIMIT 3"; 

$result = $conn->query($sql) or die(mysqli_error()); 

$photographer_array = ''; 

while($photographer_row = $result->fetch_assoc()) { 
$photographer_array .= "'" . $photographer_row['photographer_name'] . "', "; 
} 

$photographer_array = rtrim($photographer_array, ", "); 

array($photographer_array); 
+0

Dans ce cas, utilisez ma deuxième approche. – Franz

+2

Cela ne change rien. '$ photographer_array' est une chaîne, point. Pourquoi ne pas pousser les valeurs dans le tableau au lieu de les concaténer en chaîne? – n0rd

+1

Vous savez, PHP n'est pas typé, mais cela ne signifie pas qu'il effectue une conversion à la volée entre des chaînes qui ressemblent à des tableaux et des tableaux écrits. – Boldewyn

1

Il lit la chaîne sous forme de chaîne car vous l'avez encadrée entre guillemets (").Si vous voulez le faire correctement, essayez:

$array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');

Ou:

$string = "Alberto Korda, Annie Leibowitz, Ansel Adams"; $arr = explode(',', $string);

1

vous remarquerez que la $photographer_array variable est à une seule chaîne (dont la valeur est tout entre les guillemets doubles). La fonction de tableau dans php accepte une liste d'objets délimités par des virgules. Bien qu'il y ait des virgules dans votre variable $photographer_array, elles sont considérées comme des caractères dans la chaîne plutôt que comme des délimiteurs réels. Vous créez donc simplement un tableau avec une seule valeur qui se trouve être une chaîne. Ce que vous voulez sans doute est la suivante:

$photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'); 
1

Si vous avez besoin d'une chaîne pour faire un bon usage de tableau:

$ photographer_array = " 'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams";

eval("\$myArray = array(" . $photographer_array . ");"); 

Et après utilisation $myArray

Questions connexes