我有一个多维数组,定义如下
$SquadList = array('name', 'position', 'dob', 'nation', 'games', 'goals', 'assists');
我遍历了几个foreach循环并存储来自JSON的数据
foreach ($season as $key => $squad){
$SquadList[0] = $squad['full_name'];
$SquadList[1] = $squad['position'];
$SquadList[2] = gmdate("d-m-y", $birthday);
$SquadList[3] = $squad['nationality'];
$SquadList[4] = $squad['appearances_overall'];
$SquadList[5] = $squad['goals_overall'];
$SquadList[6] = $squad['assists_overall']; }
foreach ($season1 as $key => $squad){
$SquadList[0] = $squad['full_name'];
$SquadList[1] = $squad['position'];
$SquadList[2] = gmdate("d-m-y", $birthday);
$SquadList[3] = $squad['nationality'];
$SquadList[4] = $squad['appearances_overall'];
$SquadList[5] = $squad['goals_overall'];
$SquadList[6] = $squad['assists_overall'];代码乱七八糟。输出只有2个元素,而它应该是30+
我尝试过array_push,如下所示
array_push($SquadList['name'], $squad['full_name'];
发布于 2021-02-10 11:44:34
我不确定我的问题是否正确,但我想您希望它的结构是这样的:
$SquadList = []; // define it as an array
$ctr = 0; // define a counter that would be used in the two iterations
foreach ($season as $key => $squad){
$SquadList[$ctr][0] = $squad['full_name'];
$SquadList[$ctr][1] = $squad['position'];
$SquadList[$ctr][2] = gmdate("d-m-y", $birthday);
$SquadList[$ctr][3] = $squad['nationality'];
$SquadList[$ctr][4] = $squad['appearances_overall'];
$SquadList[$ctr][5] = $squad['goals_overall'];
$SquadList[$ctr][6] = $squad['assists_overall'];
$ctr++; // increase counter
}
foreach ($season1 as $key => $squad){
$SquadList[$ctr][0] = $squad['full_name'];
$SquadList[$ctr][1] = $squad['position'];
$SquadList[$ctr][2] = gmdate("d-m-y", $birthday);
$SquadList[$ctr][3] = $squad['nationality'];
$SquadList[$ctr][4] = $squad['appearances_overall'];
$SquadList[$ctr][5] = $squad['goals_overall'];
$SquadList[$ctr][6] = $squad['assists_overall'];
$ctr++; // increase counter
}发布于 2021-02-10 13:20:38
你有两个结果的原因是因为你得到了每个赛季的最后一个阵容。这是因为每一个赛季迭代一次,就会覆盖之前的阵容。
为了解决这个问题,$SquadList必须是一个数组。但是你必须一次分配它的所有成员,否则每次你添加一个成员,数组就会递增。
填充数组的数组
foreach ($season as $key => $squad) {
$squadList[] = [
$squad['full_name'],
$squad['position'],
gmdate("d-m-y", $squad['birthday']),
$squad['nationality'],
$squad['appearances_overall'],
$squad['goals_overall'],
$squad['assists_overall']
];
}请注意我所做的几个更改:
$squadList上的大写,因为约定是以表示对象的大写开头的,而不是未定义的普通旧$squadList,所以我做了一个有根据的猜测清理代码
你提到“代码混乱”。这是一个非常健康的观察结果。
你注意到的是两件事的结果:
不要重复您的代码正在重复自己(违反DRY -
所以让我们去掉重复的代码
重构
当你开始重复你自己,这是一个信号,把东西放到一个函数中
function buildSquad(array $season)
{
foreach ($season as $key => $squad) {
$squadList[] = [
$squad['full_name'],
$squad['position'],
gmdate("d-m-y", $squad['birthday']),
$squad['nationality'],
$squad['appearances_overall'],
$squad['goals_overall'],
$squad['assists_overall']
];
}
return $squadList;
}
$squadList = [];
// if you just want to lump them all together
$squadList[] = buildSquad($season);
$squadList[] = buildSquad($season2);
// etchttps://stackoverflow.com/questions/66129081
复制相似问题