Criando matriz de loop

Tenho 2 mesas, “header” e “mach”:

header:

STATO |ID |CAMPIONATO Italy |5 |Serie A Spain |1 |Primera Division France|2 |Coppe de France 

mach:

 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 | 

Uso o seguinte código PHP para extrair dados. Devo criar uma matriz que contenha o header e as correspondências do grupo

 $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$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); 

O problema está nos grupos $ que retornam todas as datas combinadas. (Itália, Espanha, França) não são apenas grupos de header. Se você usa essa linha de código PHP:

 array_push ($groups,$info[$mach]); 

ao invés de:

 $Groups[$num] = array($info[$mach]); 

em vez disso, retorna apenas a última combinação (ciclo para) para cada header.

Gostaria de criar esta matriz

 ['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] ], [....], ] 

O que estou fazendo de errado?

Não consigo ter nenhuma tração mental em seu código, então eu rejeitei isso mesmo. Se eu estiver entendendo seu objective, criei um processo muito mais delgado e limpo para gerar a multidimensional array desejada.

* Algumas coisas a observar:

  1. Não se preocupe em declarar variables ​​se elas só serão usadas uma vez; a menos que, naturalmente, melhore em grande medida a legibilidade para fazê-lo.
  2. Use índices de matriz disponíveis dentro de loops foreach em vez de criar variables ​​incrementais adicionais.
  3. $adeguata_mach_keys faz uma pesquisa de todas as linhas em $mach procurando valores STATO que correspondem ao valor header STATO do header STATO e retorna as chaves.

Aqui está o código que testei para o sucesso com:

 $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); 

Este é o resultado (sem sub-substituição acidental):

 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', ), ), ), ), )