php foreach循环只返回每个字符串的第一个字符

时间:2010-12-29 01:06:17

标签: php string foreach

我有以下代码。它只返回字符串的第一个字符。

    $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 :(得分:0)

  

但是,如果我使用var_dump($ row);输出id字段和内容字段中的整个字符串。

好吧,为什么你使用var_dump($row[$id]);完全等于“从$ row string中获取$ id'th char”呢?

答案 1 :(得分:0)

foreach ($result as $row) {

$ result是您从表中选择的行列表。每个$行都是一个字符串。 $ row [$ id]只是从这个行字符串中选择$ id'th字符。

答案 2 :(得分:0)

我认为问题与$ result是一个数组(可能是一个关联数组)的字符串这一事实有关。 (我不熟悉Mage,但我假设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);
}

答案 3 :(得分:0)

使用类似代码的foreach语句获取数据时,不需要

- &gt; fetch()(请参阅下面的示例)。如果你不必要地使用 - &gt; 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'];
}