PHP的foreach与多维数组
我正在开发一个使用数据库类查询mySQL的php应用程序。
班级在这里:[http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/]
我根据自己的需要对课程进行了一些调整,但存在一个问题(可能是一个愚蠢的问题)
当使用select()时,它返回一个多维数组,类似于具有3个cols(id,firstname,lastname)的表的多维数组:
Array
(
[0] => Array
(
[id] => 1
[firstname] => Firstname one
[lastname] => Lastname one
)
[1] => Array
(
[id] => 2
[firstname] => Firstname two
[lastname] => Lastname two
)
[2] => Array
(
[id] => 3
[firstname] => Firstname three
[lastname] => Lastname three
)
)
现在,我希望将此数组用作mysql结果(mysql_fetch_assoc)。
我知道它可以与foreach()一起使用,但这是与简单数组一起使用的。 所以我认为我必须在每个foreach()中重新声明一个新的foreach(),但是我认为这可能会减慢速度或导致更高的服务器负载。
那么,如何以最简单的方式将此多维数组应用于foreach()?
谢谢
medk asked 2020-01-15T07:13:14Z
12个解决方案
109 votes
您可以在这里使用foreach。
foreach ($rows as $row) {
echo $row['id'];
echo $row['firstname'];
echo $row['lastname'];
}
我认为您已经习惯于使用数字索引访问数据(例如$row[0]),但这不是必需的。 我们可以使用关联数组来获取我们想要的数据。
Brad answered 2020-01-15T07:13:33Z
14 votes
您可以使用array_walk_recursive:
array_walk_recursive($array, function ($item, $key) {
echo "$key holds $item\n";
});
Karolis answered 2020-01-15T07:13:53Z
4 votes
这本来是布拉德(Brad)的回答,但我的声誉不高。
最近,我发现我也需要多维数组的键,即在foreach循环中,它不仅仅是数组的索引。
为了实现这一点,您可以使用与接受的答案非常相似的方法,但是可以如下拆分键和值
foreach ($mda as $mdaKey => $mdaData) {
echo $mdaKey . ": " . $mdaData["value"];
}
希望能对某人有所帮助。
arvy3 answered 2020-01-15T07:14:29Z
4 votes
使用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.
";
}
}
nao_de_naoned answered 2020-01-15T07:14:54Z
3 votes
霍拉/你好,我知道了! 您可以轻松获取文件名,tmp_name,file_size等。因此,我将通过一行代码向您展示如何获取文件名。
for ($i = 0 ; $i < count($files['name']); $i++) {
echo $files['name'][$i].'
';
}
它已在我的PC上经过测试。
Asraful Haque answered 2020-01-15T07:15:18Z
2 votes
foreach的示例:
while ($row = mysql_fetch_assoc($result))
{
/* ... your stuff ...*/
}
对于您的foreach和$result阵列,您可以从select()获得:
foreach ($result as $row)
{
/* ... your stuff ...*/
}
就像一样,经过适当的迭代。
aorcsik answered 2020-01-15T07:15:47Z
2 votes
一旦将数组放置到位,从多维数组中的每个值中获取详细信息就非常简单。 所以这是数组:
$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 "
foreach ($example_array as $value) {
echo "
" . $value[0] . "";echo "
" . $value[1] . "";echo "
" . $value[2] . "";}
echo "
";应该给你这样一张桌子:
|1|John|Smith |
|2|Dave|Jones |
|3|Bob |Williams|
Rmj86 answered 2020-01-15T07:16:21Z
1 votes
理想情况下,多维数组通常是数组的数组,因此我想出要声明一个空数组,然后从db创建键和值对,得到一个单独的数组,最后将在迭代中创建的每个数组推入外部数组。 如果这是一个单独的函数调用,则可以返回外部数组。 希望能有所帮助
$response = array();
foreach ($res as $result) {
$elements = array("firstname" => $result[0], "subject_name" => $result[1]);
array_push($response, $elements);
}
Poly answered 2020-01-15T07:16:41Z
1 votes
我知道这是一个很老的答案。这是不使用array_column的更快解决方案:
使用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'));
}
Akintunde-Rotimi answered 2020-01-15T07:17:11Z
0 votes
在您的情况下,正常的foreach基本上不会产生与mysql_fetch_assoc相同的结果吗?
在该数组上使用foreach时,您将获得一个包含三个键的数组:“ id”,“ firstname”和“ lastname”。
这应该与mysql_fetch_assoc在每一行中给出的(循环)相同。
Yhn answered 2020-01-15T07:17:40Z
0 votes
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]')");
}
endip answered 2020-01-15T07:17:55Z
0 votes
例如,如果您需要对数组元素进行字符串操作,则使用回调函数array_walk_recursive(甚至array_walk)效果很好。 在动态编写SQL语句时,两者都派上用场。
在这种用法中,我有这个数组,每个元素都需要附加逗号和换行符。
$some_array = [];
$ some_array中的数据
0:“数组中的某些字符串”
1:“数组中的另一个字符串”
每个php.net
如果回调函数需要使用数组的实际值, 指定callback的第一个参数作为参考。 然后,任何 对这些元素所做的更改将在原始数组中进行 本身。
array_walk_recursive($some_array, function (&$value, $key) {
$value .= ",\n";
});
结果:
“数组中的某些字符串,\ n”
“数组中的另一个字符串,\ n”
这是使用array_walk将数据库表名称放在字段前面的相同概念。
$fields = [];
$ fields中的数据:
0:“名字”
1:“姓氏”
$tbl = "Employees"
array_walk($fields, 'prefixOnArray', $tbl.".");
function prefixOnArray(&$value, $key, $prefix) {
$value = $prefix.$value;
}
结果:
“雇员。名字”
“雇员。姓氏”
我很想知道性能是否超过了foreach,但是对于包含少量元素的数组,恕我直言,这几乎不值得考虑。
Greg Bologna answered 2020-01-15T07:19:30Z