带有多维数组的php foreach
我正在开发一个php应用程序,它使用一个数据库类来查询mySQL 课程在这里: 我在课堂上做了一些调整,以满足我的需要,但有一个问题(可能是一个愚蠢的问题) 使用select()时,它会返回一个多维数组,与包含3列(id、firstname、lastname)的表类似: 排列 ( [0]=>阵列 ( [id]=>1 [名字]=>名字一 [lastname]=>lastname-one ) [1] =>阵列 ( [id]=>2 [名字]=>名字二 [lastname]=>lastname二 ) [2] =>阵列 ( [id]=>3 [名字]=>名字三 [lastname]=>lastname三 ) ) 现在我想将这个数组用作mysql结果(mysql\u fetch\u assoc) 我知道它可以与foreach()一起使用,但这是与简单数组一起使用的。因此,我认为我必须使用each foreach()重新声明一个新的foreach(),但我认为这可能会降低速度或导致更高的服务器负载 那么,如何以最简单的方式将foreach()应用于这个多维数组呢带有多维数组的php foreach,php,arrays,foreach,Php,Arrays,Foreach,我正在开发一个php应用程序,它使用一个数据库类来查询mySQL 课程在这里: 我在课堂上做了一些调整,以满足我的需要,但有一个问题(可能是一个愚蠢的问题) 使用select()时,它会返回一个多维数组,与包含3列(id、firstname、lastname)的表类似: 排列 ( [0]=>阵列 ( [id]=>1 [名字]=>名字一 [lastname]=>lastname-one ) [1] =>阵列 ( [id]=>2 [名字]=>名字二 [lastname]=>lastname二 ) [
谢谢在您的情况下,普通的foreach不会产生与mysql\u fetch\u assoc相同的结果吗 在该数组上使用foreach时,将得到一个包含以下三个键的数组:“id”、“firstname”和“lastname”
这应该与mysql\u fetch\u assoc(在循环中)为每一行给出的结果相同。您可以在这里使用foreach
foreach ($rows as $row) {
echo $row['id'];
echo $row['firstname'];
echo $row['lastname'];
}
我认为您已经习惯于使用数字标记访问数据(例如
$row[0]
),但这不是必需的。我们可以使用来获取所需的数据。mysql\u fetch\u assoc()示例:
在使用foreach
的情况下,使用从select()
获得的$result
数组:
通过适当的迭代,这与此非常相似。您可以使用
数组\u walk\u递归
:
array_walk_recursive($array, function ($item, $key) {
echo "$key holds $item\n";
});
根据布拉德的回答,这可能是一个评论,但我没有足够高的声誉 最近我发现我也需要多维数组的键,也就是说,在foreach循环中,它不仅仅是数组的索引 为了实现这一点,您可以使用与公认答案非常相似的内容,但可以按如下方式拆分键和值
foreach ($mda as $mdaKey => $mdaData) {
echo $mdaKey . ": " . $mdaData["value"];
}
希望这对某人有所帮助。理想情况下,多维数组通常是数组的数组,所以我想声明一个空数组,然后从db结果中创建一个单独的数组中的键和值对,最后将迭代创建的每个数组推送到外部数组中。如果这是一个单独的函数调用,您可以返回外部数组。希望有帮助
$response = array();
foreach ($res as $result) {
$elements = array("firstname" => $result[0], "subject_name" => $result[1]);
array_push($response, $elements);
}
对于php中的数组,foreach循环始终是一个非常好的解决方案。
在这种情况下,可以是例如:
foreach($my_array as $number => $number_array)
{
foreach($number_array as $data = > $user_data)
{
print "Array number: $number, contains $data with $user_data. <br>";
}
}
foreach($number=>my\u数组作为$number数组)
{
foreach($number\u数组为$data=>$user\u数据)
{
打印“数组编号:$number,包含$user_数据的$data.
”;
}
}
一旦数组就位,就可以直接从多维数组中的每个值中获取详细信息。这就是数组:
$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....
}
|1|John|Smith |
|2|Dave|Jones |
|3|Bob |Williams|
您可以将其周围的任何内容回音到,以便将其回音到表格中:
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>";
你好, 我得到了它!您可以轻松获得文件名、tmp_名称、文件大小等。因此,我将向您展示如何使用一行代码获取文件名
for ($i = 0 ; $i < count($files['name']); $i++) {
echo $files['name'][$i].'<br/>';
}
for($i=0;$i ;
}
它是在我的电脑上测试的。我知道这是一个相当古老的答案。 下面是一个不使用foreach的更快的解决方案: 使用
array\u列
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'));
}
例如,如果您需要对数组元素执行字符串操作,那么使用回调函数(甚至)效果很好。在动态编写SQL语句时,两者都很方便 在这种用法中,我有一个数组,每个元素都需要附加逗号和换行符
$some_array = [];
$some_数组中的数据0:“数组中的某个字符串”
1:“数组中的另一个字符串” 每php.net 如果需要使用数组的实际值, 指定回调的第一个参数作为引用。那么,任何 对这些元素所做的更改将在原始数组中进行 本身 结果:
“数组中的某些字符串,\n”
数组中的另一个字符串,\n 这里使用array_walk将数据库表名预先添加到字段中也是同样的概念
$fields = [];
$fields中的数据:0:“名字”
1:“姓氏” 结果:
“员工名字”
“雇员。姓氏”
我很想知道foreach的性能是否存在问题,但是对于一个包含少量元素的数组,IMHO,这几乎不值得考虑。为什么需要第二个
foreach
?您只需使用一个循环就可以准备好所有变量,您只需以$value['id']
等形式访问它们。这是真的,但正如我所说的数组是多维的,我不知道如何在代码中像foreach($key=>$value)那样循环,它看起来是这样的:foreach($row数组){echo$row['id'].$row['firstname']。“,”$row['lastname'];}
将产生三行,显示结果的ID、firstname和lastname:)。如果您想动态循环所有键+值,您几乎需要另一个foreach。然而;通常你写查询,这样你就知道结果了,对吧?为什么你要在foreach上这么做?似乎是在浪费内存,为每次迭代定义匿名函数。@Brad,我不喜欢它胜过foreach在这种情况下,我只是想展示一个替代方案。顺便说一句,我不认为它浪费了很多内存,我认为是PHP
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'));
}
$some_array = [];
array_walk_recursive($some_array, function (&$value, $key) {
$value .= ",\n";
});
$fields = [];
$tbl = "Employees"
array_walk($fields, 'prefixOnArray', $tbl.".");
function prefixOnArray(&$value, $key, $prefix) {
$value = $prefix.$value;
}