带有多维数组的php 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二 ) [

我正在开发一个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()应用于这个多维数组呢


谢谢

在您的情况下,普通的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; 
}