首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建循环数组

创建循环数组
EN

Stack Overflow用户
提问于 2017-03-02 22:27:59
回答 1查看 63关注 0票数 0

我有两个表,"header“和"mach":

标题:

代码语言:javascript
复制
STATO |ID |CAMPIONATO
Italy |5  |Serie A
Spain |1  |Primera Division
France|2  |Coppe de France

马赫:

代码语言:javascript
复制
STATO |home     |away     |scoreH|scoreA|
Italy |juve     |Milan    |0     |0     |
Italy |Lazio    |Roma     |0     |1     |
Spain |Deportivo|Bilbao   |1     |0     |
Spain |A Madrid |Sevilla  |1     |2     |
France|Lille    |Perigord |0     |0     |

我使用以下PHP代码提取数据。是否应该创建一个包含标头和组匹配的数组?

代码语言:javascript
复制
$num=0;
$mach=-1;
foreach($first as $row2){  // cycling once

           foreach($header as $row){   //    cycles x times

                    ....        //Here recover the header data
                    $stato;
                    $id;
                    $campionato



                        for($i=0;$i<$count;++$i){   //   in $count know how many times I have to do the cycle for each header (stato)
                        $mach=$mach+1;
                           ....            // Here recover the mach data
                           $home;
                           $away;
                           $scoreH;
                           $scoreA;

                        $info[$mach]= array('home'=>$home,'away'=>$away,'scoreH'=>$scoreH,'scoreA'=>$scoreA);
                        $groups[$num]=array($info[$mach]);
                        }//end for cycles

                        $headerArray[$num]=array('header'=>['stato'=>$stato,'id'=>$id,'campionato'=>$campionato],'mach'=>$groups[$um]);
            $num++;
           } //end header cycles

                       $blockArray[]=array('incontri'=>$headerArray);

} //end first cycle
                       print_r($blockArray);

问题在于返回所有日期比赛的$groups。(意大利、西班牙、法国)不仅仅是头球组。如果您使用这一行PHP代码:

代码语言:javascript
复制
array_push ($groups,$info[$mach]);

而不是:

代码语言:javascript
复制
$Groups[$num] = array($info[$mach]);

相反,只返回每个标题的最后一个匹配(循环)。

我想创建这个数组

代码语言:javascript
复制
['incontri'=>
[
header=>
    ['stato'=>Italy,'id'=>5,'campionato'=>Serie A],

mach=>
    ['home'=>Juve,'away'=>Milan,'scoreH'=>0,'scoreA'=>0],
    ['home'=>Lazio,'away'=>Roma,'scoreH'=>0,'scoreA'=>0]

],
[....],
]

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-10 03:26:15

我无法在你的代码上得到任何精神上的牵引力,所以我自己重写了它。如果我理解您的目标,我已经构建了一个更精简、更干净的过程,用于生成您想要的多维数组。

*值得注意的是:

  1. 如果变量只使用一次,就不必声明它们;当然,这样做很大程度上提高了可读性。
  2. 在foreach循环中使用可用的数组索引,而不是创建额外的增量变量。
  3. $adeguata_mach_keys$mach中的所有行进行搜索,查找与header STATO值匹配的STATO值,并返回键。

下面是我测试成功的代码:

代码语言:javascript
复制
$first=array();  // only cycles once, so don't bother looping it, just call it by key (I am assuming 0, but that may be wrong)
$first[0]=array(
    array("STATO"=>"Italy","ID"=>5,"CAMPIONATO"=>"Serie A"),
    array("STATO"=>"Spain","ID"=>1,"CAMPIONATO"=>"Primera Division"),
    array("STATO"=>"France","ID"=>1,"CAMPIONATO"=>"Coppe de France")
);
$mach=array(
    array("STATO"=>"Italy","home"=>"juve","away"=>"Milan","scoreH"=>"0","scoreA"=>"0"),
    array("STATO"=>"Italy","home"=>"Lazio","away"=>"Roma","scoreH"=>"0","scoreA"=>"1"),
    array("STATO"=>"Spain","home"=>"Deportivo","away"=>"Bilbao","scoreH"=>"1","scoreA"=>"0"),
    array("STATO"=>"Spain","home"=>"A Madrid","away"=>"Sevilla","scoreH"=>"1","scoreA"=>"2"),
    array("STATO"=>"Spain","home"=>"Lille","away"=>"Perigord","scoreH"=>"0","scoreA"=>"0")
);

foreach($first[0] as $header_index=>$header_row){
    foreach($header_row as $header_row_key=>$header_row_val){
        $result[$header_index]["header"][$header_row_key]=$header_row_val;
        // identify which mach rows hold matching STATO values
        $adeguata_mach_keys=array_keys(array_intersect(array_column($mach,"STATO"),array($header_row["STATO"])));
        foreach($adeguata_mach_keys as $mach_index=>$mach_key){
            foreach($mach[$mach_key] as $mach_row_key=>$mach_row_val){
                $result[$header_index]["mach"][$mach_index][$mach_row_key]=$mach_row_val;
            }
        }
    }
}
$result=array("incontri"=>$result);  // I wouldn't do this, but if it is necessary for your case, fine.
print_r($result);

这是结果(没有意外的子数组覆盖):

代码语言:javascript
复制
array (
    'incontri' => array (
        0 => array (
            'header' => array (
                'STATO' => 'Italy',
                'ID' => 5,
                'CAMPIONATO' => 'Serie A',
            ),
            'mach' => array (
                0 => array (
                    'STATO' => 'Italy',
                    'home' => 'juve',
                    'away' => 'Milan',
                    'scoreH' => '0',
                    'scoreA' => '0',
                ),
                1 => array (
                    'STATO' => 'Italy',
                    'home' => 'Lazio',
                    'away' => 'Roma',
                    'scoreH' => '0',
                    'scoreA' => '1',
                ),
            ),
        ),
        1 => array (
            'header' => array (
                'STATO' => 'Spain',
                'ID' => 1,
                'CAMPIONATO' => 'Primera Division',
            ),
            'mach' => array (
                0 => array (
                    'STATO' => 'Spain',
                    'home' => 'Deportivo',
                    'away' => 'Bilbao',
                    'scoreH' => '1',
                    'scoreA' => '0',
                ),
                1 => array (
                    'STATO' => 'Spain',
                    'home' => 'A Madrid',
                    'away' => 'Sevilla',
                    'scoreH' => '1',
                    'scoreA' => '2',
                ),
            ),
        ),
        2 => array (
            'header' => array (
                'STATO' => 'France',
                'ID' => 1,
                'CAMPIONATO' => 'Coppe de France',
            ),
            'mach' => array (
                0 => array (
                    'STATO' => 'France',
                    'home' => 'Lille',
                    'away' => 'Perigord',
                    'scoreH' => '0',
                    'scoreA' => '0',
                ),
            ),
        ),
    ),
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42567211

复制
相关文章

相似问题

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