与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')); }