PHP中的foreach会破坏它下面的数组吗?

PHP中的foreach会破坏它下面的数组吗?,php,arrays,Php,Arrays,我有一个数组来显示年龄,如下所示: $list = [ ['name' => 'Quan', 'age' => '20'], ['name' => 'Jyri', 'age' => '30'], ['name' => 'Jani', 'age' => '250'] ]; 然后,在HTML部分,我使用foreach检索它们 <?php foreach($list as $list) { ?> <h4&g

我有一个数组来显示年龄,如下所示:

$list = [
    ['name' => 'Quan', 'age' => '20'],
    ['name' => 'Jyri', 'age' => '30'],
    ['name' => 'Jani', 'age' => '250']
];
然后,在HTML部分,我使用foreach检索它们

<?php foreach($list as $list) { ?>
        <h4><?php echo $list['name']; ?></h4>
        <p><?php echo $list['age']; ?></p>
<?php }?>
下面是html部分。这是成功的

<?php sayName($list[1]['name']);?>
请告诉我如何解决这个问题。非常感谢。 以下是完整代码:


p/s:我的问题与重复,因为在我的问题中,我已经初始化了数组。

您不应该使用数组的名称作为doring foreach值的变量名。而不是:

<?php foreach($list as $list) { ?>
        <h4><?php echo $list['name']; ?></h4>
        <p><?php echo $list['age']; ?></p>
<?php }?>

尝试:



您正在循环父元素,考虑到其子元素的意思是
$list
循环
$list
,因此它不会工作

<?php foreach ($list as $list1) {?>
<h4>
    <?php echo $list1['name']; ?>
</h4>
<p>
    <?php echo $list1['age']; ?>
</p>

<?php 
sayName($list1['name']);
}
?>

</body>


如果你在循环中写,它对每个名字都有效


您的已更新。

实际上,您的数组
$list
被同一变量
$list
覆盖

如果打印此阵列:

$list = [
    ['name' => 'Quan', 'age' => '20'],
    ['name' => 'Jyri', 'age' => '30'],
    ['name' => 'Jani', 'age' => '250']
];
这将返回以下结果:

Array
(
    [0] => Array
        (
            [name] => Quan
            [age] => 20
        )

    [1] => Array
        (
            [name] => Jyri
            [age] => 30
        )

    [2] => Array
        (
            [name] => Jani
            [age] => 250
        )

)
print_r($list);
但是,在这个循环之后:

<?php foreach($list as $list) { ?>
        <h4><?php echo $list['name']; ?></h4>
        <p><?php echo $list['age']; ?></p>
<?php }?>
这将明确地为
未定义的偏移量
提供
通知
,因为如果您使用print\r检查数组,将得到以下结果:

Array
(
    [0] => Array
        (
            [name] => Quan
            [age] => 20
        )

    [1] => Array
        (
            [name] => Jyri
            [age] => 30
        )

    [2] => Array
        (
            [name] => Jani
            [age] => 250
        )

)
print_r($list);
结果:

Array
(
    [name] => Jani
    [age] => 250
)
所以解决方案是,在循环中调用函数,并更改值的变量名,如:

<?php foreach($list as $value) { // change this line ?>
    <h4><?=sayName($value['name']);?></h4>    
<?php }?>


您在循环中可能会覆盖
$list
。将其更改为
foreach($l列表)
,并在循环中使用
$l
而不是
$list
。谢谢。现在可以了。而且,回到我以前的组合,当我把它改为sayName($list['name'),它起作用了,但它显示了Jani,阵列中的最后一个人。真奇怪。
print_r($list);
Array
(
    [name] => Jani
    [age] => 250
)
<?php foreach($list as $value) { // change this line ?>
    <h4><?=sayName($value['name']);?></h4>    
<?php }?>