多维数组到PHP中的嵌套多维数组

多维数组到PHP中的嵌套多维数组,php,arrays,Php,Arrays,我有这样一个数组: sid sname did dname 1 Basketball 1 Mini 1 Basketball 3 Cadet 2 Baseball 8 Little Leagu

我有这样一个数组:

   sid         sname               did               dname
    1         Basketball            1                 Mini
    1         Basketball            3                 Cadet
    2         Baseball              8             Little League
    2         Baseball              6             Junior League
    1         Basketball            5                Masters
 array('Basketball' => array(
                        'id' => 1, 
                        'divisions' => array(
                                          1 => 'Mini',
                                          3 => 'Cadet',
                                          5 => 'Masters'
                                       )
                       ),
       'Baseball' => array(
                        'id' => 2, 
                        'divisions' => array(
                                          8 => 'Little League',
                                          6 => 'Junior League'
                                       )
                       )
 );
我试图得到它并将其转换为嵌套数组,如下所示:

   sid         sname               did               dname
    1         Basketball            1                 Mini
    1         Basketball            3                 Cadet
    2         Baseball              8             Little League
    2         Baseball              6             Junior League
    1         Basketball            5                Masters
 array('Basketball' => array(
                        'id' => 1, 
                        'divisions' => array(
                                          1 => 'Mini',
                                          3 => 'Cadet',
                                          5 => 'Masters'
                                       )
                       ),
       'Baseball' => array(
                        'id' => 2, 
                        'divisions' => array(
                                          8 => 'Little League',
                                          6 => 'Junior League'
                                       )
                       )
 );
我使用的这个foreach循环不起作用,它替换了每个除法条目,所以我只剩下一个除法条目,这是最后一个条目

$result = '';
foreach($row as $r) 
{

     $result[$r['sname']] = array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname']));

}
这个foreach循环给出了以下结果:

 array('Basketball' => array(
                        'id' => 1, 
                        'divisions' => array(
                                          5 => 'Masters'
                                       )
                       ),
       'Baseball' => array(
                        'id' => 2, 
                        'divisions' => array(
                                          6 => 'Junior League'
                                       )
                       )
 );

我不明白这里出了什么问题。。有人能帮我吗?

检查是否存在具有isset或array\u key\u的密钥,这样就不会被重写。

检查是否存在具有isset或array\u key\u的密钥,这样就不会被重写。

我想:

$result[$r['sname']][] = array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname']));
我想你想要:

$result[$r['sname']][] = array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname']));

问题是每次都要重新定义$result[$r['sname']]。仅当尚未定义时才需要定义它

$result = array(); // initialize this to an appropriate type!
foreach($row as $r) 
{

   if(!isset($result[$r['sname']]))
   {
      $result[$r['sname']] = array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname']));
      continue;
   }
   $result[$r['sname']]['divisions'][$r['did']] = $r['dname'];

}

问题是每次都要重新定义$result[$r['sname']]。仅当尚未定义时才需要定义它

$result = array(); // initialize this to an appropriate type!
foreach($row as $r) 
{

   if(!isset($result[$r['sname']]))
   {
      $result[$r['sname']] = array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname']));
      continue;
   }
   $result[$r['sname']]['divisions'][$r['did']] = $r['dname'];

}
您当前所做的是覆盖$result[$r['sname']]的条目,因此其中只有一个数组

我使用if是因为$array[]=比array\u push快

您当前所做的是覆盖$result[$r['sname']]的条目,因此其中只有一个数组


我之所以使用if,是因为$array[]=比array_push快,假设它能工作,这是一个非常优雅的读法。当然,它每次都会重新初始化'id'值,但这并不昂贵。+1假设它可以工作,这是一个非常优雅的读取。当然,它每次都会重新初始化'id'值,但这并不昂贵。