2012-07-12 250 views
-3

现在我明白了你不能使用echo打印数组的内容,并且必须使用foreach,但出于某种原因,这不起作用。有任何想法吗?在php中打印阵列

$rows = $stmt->fetchAll(); 
foreach ($rows as $key=>$row) 
     { 
     echo "My value at $key is $row"; 
     } 
} 

输出:

My value at 0 is ArrayMy value at 1 is ArrayMy value at 2 is Array 
+4

你'$ row'是另一个数组,让您拥有一个多维数组,你需要做的另一个的foreach() – 2012-07-12 01:46:33

+1

出了什么问题'var_dump'? – Hamish 2012-07-12 01:46:41

+0

如果你像Harnish说的那样做了一个数组转储,那么你会知道它是一个2d数组。 – 2012-07-12 04:33:47

回答

4

看来你已经使用fetchAll从PDO获取了一些东西。

此方法返回数组(行)的数组。内部阵列有column_name => value元素。因此,例如,如果您检索了“firstName”和“lastName”列,则第一条记录的这些值分别为$rows[0]['firstName']$rows[0]['lastName']

正确的方式做,这将是:

$rows = $stmt->fetchAll(); 
foreach ($rows as $key => $row) { 
    foreach ($row as $column => $value) { 
     echo "My $column value for row $key is $value\n"; 
    } 
} 

普罗蒂普:观看括号对齐,这没有关系的正确性,但使代码更易读:)

+0

谢谢先生。我认为它会更像python。 – 2012-07-12 02:02:21

0
//<pre> tag will give you a well formatted version of var_dump 
echo "<pre>"; 
var_dump($rows); 
echo "</pre>"; 
1

$行是另一种阵列,其不能被直接转换为字符串。您可以使用此功能来检查数组内容。

function d($data) 
{ 
    echo '<pre>'; 
    print_r($data); 
    echo '</pre>'; 
} 
d($stmt->fetchAll()); 

,更好地这样做(如果你忘了删除其调用不会伤害你的网站)

define('ENVIRONMENT', 'development'); 
function d($data) 
{ 
    if(ENVIRONMENT == 'development') 
    { 
    echo '<pre>'; 
    print_r($data); 
    echo '</pre>'; 
    } 
} 
d($stmt->fetchAll()); 
0

试试这个调试的$row内容:

$rows = $stmt->fetchAll(); 

foreach ($rows as $key=>$row) 
{ 
    echo "First key: $key | "; 

    foreach($row as $subkey => $subrow) 
    { 
     echo "Subkey: $subkey | Value: $subrow <br />"; 
    } 

} 

另外,使用var_dump()print_r()var_export()等功能非常重要,它们将为您预防很多问题。

0
//@parram $data-array,$d-if true then die by default it is false 
//@author Your name 

function p($data,$d = false){ 

    echo "<pre>"; 
     print_r($data); 
    echo "</pre>"; 

    if($d == TRUE){ 
     die(); 
    } 
} // END OF FUNCTION 

使用这个函数每次当你需要字符串或数组时它会变得很棒。 有2 Patameters 1 $的数据 - 它可以是数组或字符串 2. $ d - 默认为false,但如果设置为true,那么它会执行die()函数

在你的情况可以写这样的..

$rows = $stmt->fetchAll(); 

foreach ($rows as $key=>$row) { 
     p($rows); // to use p function use above code for p() in your code 
}