首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的多维数组-如何使用foreach添加值

PHP中的多维数组-如何使用foreach添加值
EN

Stack Overflow用户
提问于 2021-02-10 08:03:36
回答 2查看 44关注 0票数 0

我有一个多维数组,定义如下

$SquadList = array('name', 'position', 'dob', 'nation', 'games', 'goals', 'assists');

我遍历了几个foreach循环并存储来自JSON的数据

代码语言:javascript
复制
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'];

EN

回答 2

Stack Overflow用户

发布于 2021-02-10 11:44:34

我不确定我的问题是否正确,但我想您希望它的结构是这样的:

代码语言:javascript
复制
$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
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-10 13:20:38

你有两个结果的原因是因为你得到了每个赛季的最后一个阵容。这是因为每一个赛季迭代一次,就会覆盖之前的阵容。

为了解决这个问题,$SquadList必须是一个数组。但是你必须一次分配它的所有成员,否则每次你添加一个成员,数组就会递增。

填充数组的数组

代码语言:javascript
复制
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']
    ];
}

请注意我所做的几个更改:

  1. 我去掉了$squadList上的大写,因为约定是以表示对象的大写开头的,而不是未定义的普通旧$squadList,所以我做了一个有根据的猜测

清理代码

你提到“代码混乱”。这是一个非常健康的观察结果。

你注意到的是两件事的结果:

不要重复您的代码正在重复自己(违反DRY -

  1. Yourself)
  2. Need to
    1. of PSR-12

所以让我们去掉重复的代码

重构

当你开始重复你自己,这是一个信号,把东西放到一个函数中

代码语言:javascript
复制
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);
// etc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66129081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档