Значение массива PHP echo после цикла while - PullRequest
0 голосов
/ 03 февраля 2012

Как вывести значение после цикла while. Если я сделаю эхо в приведенном ниже коде, он говорит, что неопределенный индекс.

$sql_cast = "SELECT *
            FROM
              title_cast
              INNER JOIN title ON (title_cast.id_title = title.id)
              INNER JOIN `cast` ON (title_cast.id_cast = `cast`.id)
            WHERE
              title_cast.id_title = '1'";
$result_cast = mysql_query($sql_cast) or die('log error with' .mysql_error());
$cast = array();
while ($row = mysql_fetch_assoc($result_cast)) {
                $id = $row['id'];
                $name = $row['name'];
                $img = $row['photo_localurl'];
                $poster = str_replace("./", "lib/", $img);

                $cast[] = array('id' => $id, 'name' => $name, 'img' => $poster);
                //$cast[] = $row;
                }
                //var_dump($cast);
                echo $cast['id'] . " " . $cast['name'] . " " . $cast['poster']."<br />";

Ответы [ 6 ]

2 голосов
/ 03 февраля 2012

В цикле while вы устанавливаете содержимое массива при помощи синтаксиса $cast[].Это создаст числовой индекс, начиная с 0, затем 1 и т. Д., Поэтому вы создаете массив, который выглядит следующим образом:

$cast = array(
    0 => array('id' => $id, 'name' => $name, 'img' => $poster),
    1 => array('id' => $id, 'name' => $name, 'img' => $poster)
);

Вам необходимо включить числовой ключ массива, который выхочу повторить.Например, если вы хотите отобразить первую строку:

echo $cast[0]['id']; // Echo the id of the first result

Если вы хотите отобразить ВСЕ строки, используйте foreach:

foreach($cast as $row) {
    echo $row['id'];
}
0 голосов
/ 03 февраля 2012

С вашим кодом есть две проблемы. Во-первых, $ cast [] - это двумерный массив, поэтому он содержит массивы в каждом своем индексе, поэтому вы должны использовать

$cast[$i]['id'] 

Где я буду переменной счетчика, которая будет перебирать все индексы. Во вторых изменить

$cast['poster'] 

до

$cast['img']

Надеюсь, это поможет.

0 голосов
/ 03 февраля 2012

Попробуйте это:

<?php
while ($row = mysql_fetch_assoc($result_cast)) {
      $id = $row['id'];
      $name = $row['name'];
      $img = $row['photo_localurl'];
      $poster = str_replace("./", "lib/", $img);

      $cast[] = array('id' => $id, 'name' => $name, 'img' => $poster);
}

foreach($cast as $rows) {
    echo $rows['id']." ".$rows['name']." ".$rows['img']."<br />";
}
?>
0 голосов
/ 03 февраля 2012
print_r($cast[0]); or you can use $cast[0]['id'] ;
0 голосов
/ 03 февраля 2012

Это потому, что вы помещаете новый массив в $ cast для каждого индекса ..

Так что вы должны повторить как это ..

$i = 0;
while ($row = mysql_fetch_assoc($result_cast)) {
      $id = $row['id'];
      $name = $row['name'];
      $img = $row['photo_localurl'];
      $poster = str_replace("./", "lib/", $img);

      $cast[] = array('id' => $id, 'name' => $name, 'img' => $poster);
      //$cast[] = $row;

      //var_dump($cast);
      echo $cast[$i]['id'] . " " . $cast[$i]['name'] . " " . $cast[$i]['poster']."<br />";
      $i++;
}
0 голосов
/ 03 февраля 2012

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

$cast = array('id' => $id, 'name' => $name, 'img' => $poster);
                //$cast[] = $row;
                }
                //var_dump($cast);
echo $cast['id'] . " " . $cast['name'] . " " . $cast['poster']."<br />";

, потому что, если вы используете $ cast [] , он добавит новый массив в ваш массив ..

...