【发布时间】:2016-08-07 11:40:20
【问题描述】:
我正在尝试使用 foreach 循环遍历多个数组并将值分成由每个数组上的 ID 值确定的 2 个组,然后将它们回显到一个表中。
例如,我有如下给定的 2D 数组:(我仅使用 3 作为示例,但实际上会有更多)
Array
(
[results] => Array
(
[numbpeople] => 3
[people] => Array
(
[0] => Array
(
[name] => bert
[mainId] => 2
[beens] => 0
[coins] => 8
[total] => 3
[ammount] => 2
[place] => 15
[type] => 0
)
[1] => Array
(
[name] => bungle
[mainId] => 1
[beens] => 0
[coins] => 4
[total] => 0
[ammount] => 10
[place] => 13
[type] => 0
)
[2] => Array
(
[name] => fred
[mainId] => 2
[beens] => 0
[coins] => 3
[total] => 1
[ammount] => 8
[place] => 11
[type] => 0
)
)
)
)
我尝试了以下代码,但它并没有按照预期的方式工作。
//foreach ($data['results']['people'] as $pValue) {
foreach ($data['results']['people'] as $Key => $pValue) {
$numPeople = $data["results"]["numbpeople"]; //[$i];
if($numPeople>-1)
{
$MainId1="";
$MainId2="";
// set up header
echo "<strong>People:<br>name, beens, coins, total.</strong><br>";
echo "<br>";
// calculate who's got what?
$i=0;
while($i<$numPeople)
{
$pname[$i]=$pValue["name"][$i];
$pmainId[$i]=$pValue["mainId"][$i];
$pbeens[$i]=$pValue["beens"][$i];
$pcoins[$i]=$pValue["coins"][$i];
$ptotal[$i]=$pValue["total"][$i];
if(!stristr($pValue["mainId"],"1") && !stristr($pValue["mainId"],"2")) {
if($pmainId[$i]!=$MainId1 && $MainId1=="") {
$p1Name=$pname[$i]; // people1 name
$p1Beens=$pbeens[$i]; // people1 beens
$p1Coins=$pcoins[$i]; // people1 coins
$p1Total=$ptotal[$i]; // people1 total
}
if($pmainId[$i]!=$MainId1 && $MainId1!="" && $MainId2=="") {
$p2Name=$pname[$i]; // people2 name
$p2Beens=$pbeens[$i]; // people2 beens
$p2Coins=$pcoins[$i]; // people2 coins
$p2Total=$ptotal[$i]; // people2 total
}
// Id
if($pmainId[$i]!=$MainId1 && $MainId1=="") {
$MainId1=$pmainId[$i];
}
if($pmainId[$i]!=$MainId1 && $MainId1!="" && $MainId2=="") {
$MainId2=$pmainId[$i];
}
} else {
$MainId1="1";
$MainId2="2";
}
// output people ?
echo $i.". -> ".$p1Name[$i].", ".$p1Beens[$i].", ".$p1Coins[$i].", ".$p1Total[$i];
// 1 bungle 0 4 0
echo "<br>";
echo $i.". -> ".$p2Name[$i].", ".$p2Beens[$i].", ".$p2Coins[$i].", ".$p2Total[$i];
// 1 bert 0 8 3
// 2 fred 0 3 1
echo "<br>";
echo $MainId1, $MainId2;
// 1 2
echo "<br>";
$i++;
}
}else {
echo "No people";
}
}
更好的更精细的解决方案会很有帮助。
【问题讨论】:
-
什么不起作用?
-
请提供您希望获得的数据结构作为您给出的示例输入的输出。注意:在样本输入
numbpeople中看到三个条目的数组时为 2,这很奇怪。这种区别是什么意思? -
抱歉错字已更正
标签: php multidimensional-array foreach