2010-12-29 17 views
2

私は以下のコードを持っています。文字列の最初のcharaterを返すだけです。私はvar_dump($row);を使用する場合PHP 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++; 
} 

ただし、IDフィールド及びコンテンツフィールドの両方からの全列が出力されます。

誰も私が間違っていることを説明することはできますか?

ありがとうございます。

+0

文字列は文字の配列として表示されるので、 '$ test =" abcs "'も '$ test = array( 'a'、 ' $ test [2] 'は' c'をcharの配列の3番目のインデックスとして表示します。 – RobertPitt

+0

@RobertPitt:私は、アナログの "string == array"が要素にアクセスするためにのみ真であることに気づくでしょう。他のケースでは、文字列と配列の動作が異なります。 – zerkms

+0

はい、彼らは違った振る舞いをします。私が考えているのは、ArrayAccessがStrings haeに実装したことです。 – RobertPitt

答えて

0

ただし、var_dump($ row)を使用すると、 idフィールドとcontentフィールドの両方からの文字列全体が出力されます。

なぜ、var_dump($row[$id]);は「$行の文字列から$ id番目の文字を取り出す」と正確に同じですか?

+0

私が達成しようとしているのは、結果のidフィールドを分離することです。 – Jack

+0

@Jack: 'var_dump($ result);'そこにキー 'id'がありますか?もしそうなら、ループの代わりに '$ result ['id']'を使います。 – zerkms

0
foreach ($result as $row) { 

$ resultは、テーブルから選択した行のリストです。各$行は文字列です。 $ row [$ id]は、この行文字列から$ id番目の文字を選択するだけです。

0

私は、$ resultが文字列の配列(場合によっては連想配列)であるという事実と関係していると思います。 (私はMageに慣れていませんが、fetchRow()はすべての行ではなく単一行しか返しないと仮定しています)

したがって、おそらく次のようなものがあります:

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

foreach($result as $row)を実行すると、$ rowは各繰り返しで「tom」、「dick」、および「harry」のように見えます。

$ rowは文字列なので、$row[$id]を呼び出すと、PHPは$行文字列から1文字を取得しようとします。この場合、$ idが整数であることを期待しているので、おそらく "id_field1"を0と解釈して、文字列の最初の文字を返すことになります。

私はあなたが戻って取得しようとしているが、最も可能性の高い、これはあなたのforeachの部分が何かのようなことを変更することで解決することができるかを正確にわからないんだけど...

foreach ($result as $resultColumn) { 
    var_dump($resultColumn); 
} 
0

- >(フェッチ)あなたのコードのように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']; 
} 
関連する問題