Цикл php foreach возвращает только первый символ каждой строки - PullRequest
2 голосов
/ 29 декабря 2010

У меня есть код ниже.Он возвращает только первый символ строки.

    $conn = Mage::getSingleton('core/resource')->getConnection('connection_write');
$str = 'something to search for';
$fields = 'content_field1, content_field2, content_field3, content_field4';
$idFields = 'id_field1, id_field2, id_field3, id_field4';
$tables = 'table1, table2, table3, table4';
$table = explode(', ', $tables);
$field = explode(', ', $fields);
$rowId = explode(', ', $idFields);

$i=1;
while ($i<4) {
    $f = $field[$i];
    $id = $rowId[$i];
    $sql = $conn->select()->from($table[$i], array($f, $id))->where($f . " LIKE ?", '%' . $str . '%');
    $result = $conn->fetchRow($sql);

    foreach ($result as $row) {
    var_dump($row[$id]);
    }

    $i++;
}

Однако, если я использую var_dump($row);, выводится вся строка из полей id и полей контента.кто-нибудь объяснит мне, что я делаю не так?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 04 июня 2016

-> fetch () не требуется при извлечении данных с использованием оператора foreach, как в вашем коде (см. Примеры ниже). Если вы используете -> fetch () без необходимости, такая ситуация часто возникает (я тоже это испытывал ..)

оператор foreach и оператор while имеют следующие отношения. Пожалуйста, попробуйте переписать код, ссылаясь на это:

<?php
$stmt = $pdo->query('SELECT * FROM Entry');

while ($row = $stmt->fetch()) {
  echo $row['title'], $row['content'];
}
//this while statement above is equivalent to the foreach statement below

foreach ($stmt as $row) {
//->fetch() is not needed for foreach statement!
  echo $row['title'], $row['content'];
}
0 голосов
/ 29 декабря 2010
foreach ($result as $row) {

$ result - это список строк, выбранных вами из таблицы. Каждая строка $ является строкой. $ row [$ id] просто выбирает символ $ id из этой строки строки.

0 голосов
/ 29 декабря 2010

Я считаю, что проблема связана с тем фактом, что $ result является массивом (возможно, ассоциативным массивом) строк. (Я не знаком с Магом, но я предполагаю, что fetchRow () возвращает только одну строку, а не все ваши строки.)

Поэтому, что происходит, у вас, вероятно, есть что-то вроде этого:

$result = array("tom","dick","harry");

Когда вы запускаете foreach($result as $row), $ row на каждой итерации выглядит как "tom", "dick" и "harry".

Поскольку $ row является строкой, при вызове $row[$id] PHP пытается получить один символ из строки $ row. Поскольку он ожидает, что $ id будет целым числом в этом случае, он, вероятно, интерпретирует «id_field1» как 0, что в итоге вернет первый символ вашей строки.

Я не совсем уверен, что вы пытаетесь вернуть, но, скорее всего, это можно решить, изменив раздел foreach на что-то вроде ...

foreach ($result as $resultColumn) {
   var_dump($resultColumn);
}
0 голосов
/ 29 декабря 2010

Однако, если я использую var_dump ($ row); выводится вся строка из полей id и полей содержимого.

хорошо, почему вы используете var_dump($row[$id]);, что в точности равно "взять $ id'th char из строки $ row"?

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