foreach php 多重数组,PHP的foreach与多维数组

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值