Эхо-значения массивов? - PullRequest
       24

Эхо-значения массивов?

1 голос
/ 01 сентября 2011

Я хочу отобразить значения всех массивов, которые были возвращены из функции поиска.Каждый массив содержит один $category, который был собран из моей БД.Код, который я до сих пор написал для echo, это их исходное значение (например, в той же форме, в которой они лежат в моей БД.):

$rows = search($rows);

if (count($rows) > 0) {
    foreach($rows as $row => $texts) {
        foreach ($texts as $idea) {
            echo $idea; 
        }
    }
}

Однако единственное, что этот код повторяетэто длинная строка всей информации, которая существует в моей БД.

Функция, результат которой я вызываю, выглядит следующим образом:

function search($query) {

    $query = mysql_real_escape_string(preg_replace("[^A-Za-zÅÄÖåäö0-9 -_.]", "", $query));
    $sql = "SELECT * FROM `text` WHERE categories LIKE '%$query%'";

    $result = mysql_query($sql);

    $rows = array();

    while ($row = mysql_fetch_assoc($result)) {
        $rows['text'] = $row;
    }

    mysql_free_result($result);

    return $rows;
}

Как сделать так, чтобы она отражала фактическуютекст, который должен быть значением массива?

Ответы [ 4 ]

4 голосов
/ 01 сентября 2011

Эта строка: echo $rows['categories'] = $row; в вашей функции поиска проблематична.Для каждого прохода в цикле while все строки хранятся с одним и тем же ключом.Эффект только успешно сохраняет последнюю строку из вашего возвращенного запроса.

Вы должны изменить это ...

$rows = array();

while ($row = mysql_fetch_assoc($result)) {
    echo $rows['categories'] = $row;
}

mysql_free_result($result);

return $rows;

на это ...

$rows = array();

while ($row = mysql_fetch_assoc($result)) {
    $rows[] = $row;
}

return $rows;

Затем, когда вы обращаетесь к возвращенному значению, вы можете обработать его следующим образом ...

foreach ($rows as $key => $array) {
    echo $array['columnName'];
    // or
    foreach ($array as $column => $value) {
        echo $column; // column name
        echo $value; // stored value
    }
}
2 голосов
/ 01 сентября 2011

Проблема в том, что у вас есть многомерный массив, то есть каждый элемент вашего массива - это другой массив.

Вместо

echo $row['categories']; 

попробуй print_r:

print_r($row['categories']);

Технически это будет делать то, что вы просите, но, что более важно, это поможет вам понять структуру ваших подмассивов, так что вы сможете печатать нужные вам индексы вместо вывода всего массива на экран.

1 голос
/ 01 сентября 2011

Как выглядит var_dump($rows)? Похоже, это многомерный массив. Вам может понадобиться две (или более) петли:

foreach($rows as $row => $categories) {
   foreach($categories as $category) {
      echo $category;
   }
}
0 голосов
/ 01 сентября 2011

Я думаю, что это должно работать:

foreach ($rows as $row => $categories) {
    echo $categories;
}

Если это снова выведет последовательность массивов, попробуйте посмотреть, что в ней:

foreach ($rows as $row => $categories) {
    print_r($categories);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...