Почему запятые в моем массиве читаются как строка? - PullRequest
1 голос
/ 18 ноября 2009

Вот что я пытаюсь сделать:

1 - у меня есть массив со строкой.

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

2 - я пытаюсь заполнить массив этой строкой.

array($photographer_array);

Что он делает, так это создает массив с одной записью, включающей все запятые. Почему он читает запятые как строку? Есть ли в любом случае я могу сделать это не читать запятые в виде строки, а вместо этого использовать их для разделения значений в массиве?

Ответы [ 8 ]

6 голосов
/ 18 ноября 2009

Извините, что говорю, но вы не можете заполнить массив таким образом, так как строки обычно не анализируются и не выполняются. Все, что вы можете сделать, это:

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

Или это ( РЕДАКТИРОВАТЬ : Адаптировано к вашему коду запроса):

$photographer_array = array();

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

П.С .: Вы просто любите длинные имена переменных, не так ли? ;)

3 голосов
/ 18 ноября 2009

Это потому, что $photographer_array - это строка, а использование array($photographer_array) просто помещает вашу строку в массив.

Возможно, вы хотите сделать:

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

Это даст вам

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

Или вы хотите:

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

EDIT:

Относительно кода, который вы разместили - следующий код даст вам массив $photographer_row['photographer_name']:

// ...
$photographer_array = array();
while($photographer_row = $result->fetch_assoc()) {
    $photographer_array[] = $photographer_row['photographer_name'];
}
1 голос
/ 18 ноября 2009

Если вам нужна строка для использования массива:

$ photographer_array = "Альберто Корда", "Энни Лейбовиц", "Ансель Адамс" ";

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

А после использования $myArray

1 голос
/ 18 ноября 2009

вы заметите, что переменная $photographer_array установлена ​​в одну строку (значение которой находится между двойными кавычками). Функция массива в php принимает список объектов, разделенных запятыми. Хотя в вашей переменной $photographer_array есть запятые, они считаются символами в строке, а не фактическими разделителями, поэтому на самом деле вы просто создаете массив только с одним значением, которое является строкой. Что вы, вероятно, хотите, это следующее:

$photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');
1 голос
/ 18 ноября 2009

Она читает строку как строку, потому что вы заключили ее в кавычки ("). Если вы хотите сделать это правильно, попробуйте:

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

Или:

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

1 голос
/ 18 ноября 2009

Я на самом деле создаю массив, используя значения из запроса, просто чтобы вы знали, почему я делаю это таким образом. Это код, который я использую для создания строки для использования в моем массиве.

$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 голосов
/ 18 ноября 2009

Explode() это то, что вам нужно ...

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

0 голосов
/ 18 ноября 2009

Если у вас есть доступ к PHP> = 5.3.0, тогда вы можете использовать str_getcsv, который разбивает строку через запятую в массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...