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