Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP foreach复制输出数据的最后一次迭代_Php_Arrays_Foreach_Iteration - Fatal编程技术网

PHP foreach复制输出数据的最后一次迭代

PHP foreach复制输出数据的最后一次迭代,php,arrays,foreach,iteration,Php,Arrays,Foreach,Iteration,非常感谢你们的帮助。即使你发现一切都很好,你也给了我解决问题的重要线索 //解决方案 清除第一个迭代过程,因为我计划在页面开始时完成这一切,然后将其移动到主迭代。我真的不知道发生了什么,只是有一个关于引用变量的线索,然后在以后的新迭代中重用它 工作代码如下: foreach ($groups as $group) { $group['games'] = db_getGamesElimbyGroup ($group['id']); $class_by_

非常感谢你们的帮助。即使你发现一切都很好,你也给了我解决问题的重要线索

//解决方案 清除第一个迭代过程,因为我计划在页面开始时完成这一切,然后将其移动到主迭代。我真的不知道发生了什么,只是有一个关于引用变量的线索,然后在以后的新迭代中重用它

工作代码如下:

foreach ($groups as $group) {                   
$group['games'] = db_getGamesElimbyGroup ($group['id']);
    $class_by_groupID = $group['id'];

foreach ($group['games'] as $game) {
   $game['players'] = db_getPlayerElimbyGames($game['id']);             
   $class_by_gameID = $game['id']; ?>
   <div class="group<?=$class_by_groupID?> game<?=$class_by_gameID?> item clearfix">

    <?  foreach ($game['players'] as $player) { ?>

            <div class="player box<?=$player['casa_fora']?> clearfix">
                <div class="thumb" style="background-image:url(<?=$home_path.$player['thumb']?>)"></div>
                <div class="name"><?=$player['nome']?></div>
                <div class="result"><?=$player['equipa_result']?></div>
            </div>

            <?  } ?>
       </div>

     <?}
 }
使用引用将查询结果添加到同一数组。如果按原样使用数组,或使用JSON格式,则可以正常工作。我怀疑这可能是关于使用引用和相同的变量名

//旧的

我有一个数组,有几个级别,主要是小组,游戏,玩家

小组有游戏,游戏有玩家

像这样

JSON

样本阵列

Array
(
[id] => 13
[name] => Final
[games] => Array
    (
        [0] => Array
            (
                [id] => 65
                [next_game_id] => 0
                [players] => Array
                    (
                        [0] => Array
                            (
                                [equipa_result] => 0
                                [casa_fora] => 1
                                [nome] => João Monteiro Ribeiro
                                [thumb] => uploads/1364249922/thumb/foto.png
                                [jogador_id] => 6
                            )

                        [1] => Array
                            (
                                [equipa_result] => 0
                                [casa_fora] => 2
                                [nome] => Luis Silva
                                [thumb] => uploads/1364562821/thumb/177158_390926850971196_1987889821_o.jpg
                                [jogador_id] => 31
                            )
                    )
            )
    )
)
我正在为每一个级别做一个foreach,以创建单个元素,这些元素可以更容易地使用css进行样式设置

我的迭代如下:

foreach ($groups as $group) {                   

    $class_by_groupID = $group['id'];

foreach ($group['games'] as $game) {

   $class_by_gameID = $game['id']; ?>
   <div class="group<?=$class_by_groupID?> game<?=$class_by_gameID?> item clearfix">

    <?  foreach ($game['players'] as $player) { ?>

            <div class="player box<?=$player['casa_fora']?> clearfix">
                <div class="thumb" style="background-image:url(<?=$home_path.$player['thumb']?>)"></div>
                <div class="name"><?=$player['nome']?></div>
                <div class="result"><?=$player['equipa_result']?></div>
            </div>

            <?  } ?>
       </div>

     <?}
 }
foreach($groups作为$group){
$class_by_groupID=$group['id'];
foreach($组['games']作为$game){
$class_by_gameID=$game['id'];?>

你可能会得到一个有线的结果,但我能告诉你的是,这并不是因为你在问题中发布了什么:

<?php

$groups[] = array(
    'id'    => 13,
    'name'  => 'Final',
    'games' => array(
        array(
            'id'           => 65,
            'next_game_id' => 0,
            'players'      => array(
                array('equipa_result' => 0, 'casa_fora' => 1, 'nome' => 'João Monteiro Ribeiro', 'thumb' => 'uploads/1364249922/thumb/foto.png', 'jogador_id' => 6),
                array('equipa_result' => 0, 'casa_fora' => 2, 'nome' => 'Luis Silva', 'thumb' => 'uploads/1364562821/thumb/177158_390926850971196_1987889821_o.jpg', 'jogador_id' => 31),
            ),
        ),
    ),
);

$home_path = '';

foreach ($groups as $group) {

    $class_by_groupID = $group['id'];

    foreach ($group['games'] as $game) {

        $class_by_gameID = $game['id']; ?>
        <div class="group<?= $class_by_groupID ?> game<?= $class_by_gameID ?> item clearfix">

            <?php foreach ($game['players'] as $player) { ?>

                <div class="player box<?= $player['casa_fora'] ?> clearfix">
                    <div class="thumb" style="background-image:url(<?= $home_path . $player['thumb'] ?>)"></div>
                    <div class="name"><?= $player['nome'] ?></div>
                    <div class="result"><?= $player['equipa_result'] ?></div>
                </div>

            <?php } ?>
        </div>

    <?php
    } // foreach
}


只是看一下……代码看起来不错,但您的$groups数组中可能有一条额外的记录,这导致了第二个循环的一次额外迭代。

引用foreach是我的第一个想法,但由于您的原始代码没有显示它,所以我没有提到它

在PHP的foreach函数文档中,您可以阅读以下内容供将来参考:

警告

即使在foreach循环之后,$值和最后一个数组元素的引用仍然保留。建议使用unset()销毁它

下面是一个关于如何解决此问题的示例:

<?php
    $arr = array(1, 2, 3, 4);
    foreach ($arr as &$value) {
        $value = $value * 2;
    }
    // $arr is now array(2, 4, 6, 8)
    unset($value); // break the reference with the last element

能否请您将数组粘贴为JSON,以便我可以尝试调试您描述的问题?只需使用echo JSON_encode($groups).@Rolando Isidoro:你可以在下面找到该数组的PHP代码。应该可以帮你做这项工作。@RolandoIsidoro我发布了请求的Json数据,谢谢。@GFFR88PT,刚刚尝试了你的代码,输出结果看起来很好,就像其他人说的那样。@RolandoIsidoro更新了一个细节,因为数组对你们来说运行良好,我稍微回到了我想做的地方He’我明白了。嗨@hakre,谢谢你的帮助。问题是,这只是5个组中的一个,也是24个游戏中的一个。完整的JSON数据已经发布,请你试一试?!谢谢!不,如果我打印数组,我可以看到最后一条记录没有重复。即使数组发生了变化,也会发生这种情况……非常感谢@CubCouper,解决方案是因为你找到的!干杯,对了!稍后再解决…谢谢你的帖子!这将是我问题的问题和解决方案。干得好…这让我发疯。谢谢!
<?php

$groups[] = array(
    'id'    => 13,
    'name'  => 'Final',
    'games' => array(
        array(
            'id'           => 65,
            'next_game_id' => 0,
            'players'      => array(
                array('equipa_result' => 0, 'casa_fora' => 1, 'nome' => 'João Monteiro Ribeiro', 'thumb' => 'uploads/1364249922/thumb/foto.png', 'jogador_id' => 6),
                array('equipa_result' => 0, 'casa_fora' => 2, 'nome' => 'Luis Silva', 'thumb' => 'uploads/1364562821/thumb/177158_390926850971196_1987889821_o.jpg', 'jogador_id' => 31),
            ),
        ),
    ),
);

$home_path = '';

foreach ($groups as $group) {

    $class_by_groupID = $group['id'];

    foreach ($group['games'] as $game) {

        $class_by_gameID = $game['id']; ?>
        <div class="group<?= $class_by_groupID ?> game<?= $class_by_gameID ?> item clearfix">

            <?php foreach ($game['players'] as $player) { ?>

                <div class="player box<?= $player['casa_fora'] ?> clearfix">
                    <div class="thumb" style="background-image:url(<?= $home_path . $player['thumb'] ?>)"></div>
                    <div class="name"><?= $player['nome'] ?></div>
                    <div class="result"><?= $player['equipa_result'] ?></div>
                </div>

            <?php } ?>
        </div>

    <?php
    } // foreach
}
<div class="group13 game65 item clearfix">


        <div class="player box1 clearfix">
            <div class="thumb" style="background-image:url(uploads/1364249922/thumb/foto.png)"></div>
            <div class="name">João Monteiro Ribeiro</div>
            <div class="result">0</div>
        </div>


        <div class="player box2 clearfix">
            <div class="thumb" style="background-image:url(uploads/1364562821/thumb/177158_390926850971196_1987889821_o.jpg)"></div>
            <div class="name">Luis Silva</div>
            <div class="result">0</div>
        </div>

            </div>
<?php
    $arr = array(1, 2, 3, 4);
    foreach ($arr as &$value) {
        $value = $value * 2;
    }
    // $arr is now array(2, 4, 6, 8)
    unset($value); // break the reference with the last element