与multidimensional array的PHP foreach

我正在开发一个使用数据库类来查询MySQL的PHP​​应用程序。

该类在这里: http : //net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/

我在课上做了一些调整,以适应我的需要,但是有一个问题(也许是一个愚蠢的问题)

当使用select()时,它会为具有3列(id,firstname,lastname)的表返回一个multidimensional array:

排列
 (
     [0] =>数组
         (
             [id] => 1
             [firstname] =>名字一
             [姓氏] =>姓氏一个
         )

     [1] =>数组
         (
             [id] => 2
             [firstname] =>名字二
             [姓氏] =>姓氏二
         )

     [2] =>数组
         (
             [id] => 3
             [firstname] =>名字三
             [姓氏] =>姓氏三
         )
 )

现在我想这个数组被用作一个mysql结果(mysql_fetch_assoc)。

我知道它可以用于foreach(),但这是简单的数组。 所以我认为我必须使用每个foreach()重新声明一个新的foreach(),但我认为这可能会减慢或导致更高的服务器负载。

那么如何用这个multidimensional array应用foreach()是最简单的方法呢?

谢谢

你可以在这里使用foreach就好了。

 foreach ($rows as $row) { echo $row['id']; echo $row['firstname']; echo $row['lastname']; } 

我觉得你已经习惯了用数字指示(比如$row[0] )访问数据,但这不是必须的。 我们可以使用关联数组来获取我们之后的数据。

你可以使用array_walk_recursive

 array_walk_recursive($array, function ($item, $key) { echo "$key holds $item\n"; }); 

mysql_fetch_assoc()例子:

 while ($row = mysql_fetch_assoc($result)) { /* ... your stuff ...*/ } 

在你的情况与foreach ,你从select()得到$result数组:

 foreach ($result as $row) { /* ... your stuff ...*/ } 

这是非常相似的,适当的迭代。

根据布拉德的回答,这将是一个评论,但我没有足够的声誉。

最近我发现我也需要multidimensional array的键,也就是说,在foreach循环中它不仅仅是一个数组的索引。

为了达到这个目的,你可以使用与接受的答案非常相似的东西,而是按如下方式分割键和值

 foreach ($mda as $mdaKey => $mdaData) { echo $mdaKey . ": " . $mdaData["value"]; } 

希望能帮助别人。

在你的情况下,正常的foreach基本上不会产生与mysql_fetch_assoc相同的结果吗?

当在这个数组上使用foreach时,你会得到一个包含这三个键的数组:'id','firstname'和'lastname'。

这应该是相同的mysql_fetch_assoc会给(循环)的每一行。

 foreach ($parsed as $key=> $poke) { $insert = mysql_query("insert into soal (pertanyaan, a, b, c, d, e, jawaban) values ('$poke[question]', '$poke[options][A]', '$poke[options][B]', '$poke[options][C]', '$poke[options][D]', '$poke[options][E]', '$poke[answer]')"); } 

理想情况下,multidimensional array通常是一个数组的数组,所以我认为是声明一个空的数组,然后创build一个单独的数组中的数据库的键和值对,最后将迭代创build的每个数组推到外部数组。 如果这是一个单独的函数调用,则可以返回外部数组。 希望有所帮助

 $response = array(); foreach ($res as $result) { $elements = array("firstname" => $result[0], "subject_name" => $result[1]); array_push($response, $elements); } 

在PHP中使用数组,foreach循环总是一个漂亮的解决scheme。
在这种情况下,它可能是例如:

 foreach($my_array as $number => $number_array) { foreach($number_array as $data = > $user_data) { print "Array number: $number, contains $data with $user_data. <br>"; } } 

在一个multidimensional array中的每一个数值都能得到详细的数据,只要你有一个数组,就可以很简单的了。 所以这是arrays:

 $example_array = array( array('1','John','Smith'), array('2','Dave','Jones'), array('3','Bob','Williams') ); 

然后使用foreach循环,让数组像这样运行:

 foreach ($example_array as $value) { echo $value[0]; //this will echo 1 on first cycle, 2 on second etc.... echo $value[1]; //this will echo John on first cycle, Dave on second etc.... echo $value[2]; //this will echo Smith on first cycle, Jones on second etc.... } 

你可以随心所欲地回显任何你喜欢的东西,以便回显一张表格:

 echo "<table>" foreach ($example_array as $value) { echo "<tr><td>" . $value[0] . "</td>"; echo "<td>" . $value[1] . "</td>"; echo "<td>" . $value[2] . "</td></tr>"; } echo "</table>"; 

应该给你这样的表格:

 |1|John|Smith | |2|Dave|Jones | |3|Bob |Williams| 

霍拉/你好 ,我明白了! 你可以很容易的得到文件名,tmp_name,file_size等,所以我会告诉你如何用一行代码获取文件名。

 for ($i = 0 ; $i < count($files['name']); $i++) { echo $files['name'][$i].'<br/>'; } 

它在我的电脑上进行testing。

我知道这是一个古老的答案。 没有使用foreach这是一个更快的解决scheme:

使用array_column

 print_r(array_column($array, 'firstname')); #returns the value associated with that key 'firstname' 

也可以在执行上述操作之前检查

 if(array_key_exists('firstname', $array)){ print_r(array_column($array, 'firstname')); }