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

时间:2023-01-16 21:31:23

I have an array like so:

我有一个像这样的数组:

   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

I was trying to get this and transform it to a nested array like so:

我试图得到它并将其转换为嵌套数组,如下所示:

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

And I am using this foreach loop which is not working, it replaces each division entry so I'm left with only one division entry which is the last entry.

我正在使用这个不起作用的foreach循环,它取代了每个分区条目,所以我只剩下一个分区条目,这是最后一个条目。

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

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

}

This foreach loop gives me this result:

这个foreach循环给了我这个结果:

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

I don't understand what is wrong here.. can anybody help me out here?

我不明白这里有什么问题..有人可以帮帮我吗?

5 个解决方案

#1


3  

The problem is that you redefine $result[$r['sname']] each time. You only need to define it if it is not already defined.

问题是你每次都重新定义$ 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'];

}

#2


1  

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

     $result[$r['sname']]['id'] = $r['sid'];
     $result[$r['sname']]['divisions'][$r['did']] = $r['dname'];

}

#3


0  

Check for existence of the key with isset() or array_key_exists() beforehand so that it doesn't get rewritten.

使用isset()或array_key_exists()检查是否存在密钥,以便不会重写。

#4


0  

i think you want:

我想你想要:

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

#5


0  

$result = array();
foreach($row as $r) 
{
    if(isset($result[$r['sname']]))
    {
        array_push($result[$r['sname']], array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname'])));
    }
    else
    {
        $result[$r['sname']] = array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname']))
    }
}

What you are currently doing is overwriting the entry for $result[$r['sname']], so it will only ever have one array in it.

你目前正在做的是覆盖$ result [$ r ['sname']]的条目,所以它只会有一个数组。

I use the if because $array[] = is quicker than array_push see php docs

我使用if因为$ array [] =比array_push更快看到php文档

#1


3  

The problem is that you redefine $result[$r['sname']] each time. You only need to define it if it is not already defined.

问题是你每次都重新定义$ 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'];

}

#2


1  

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

     $result[$r['sname']]['id'] = $r['sid'];
     $result[$r['sname']]['divisions'][$r['did']] = $r['dname'];

}

#3


0  

Check for existence of the key with isset() or array_key_exists() beforehand so that it doesn't get rewritten.

使用isset()或array_key_exists()检查是否存在密钥,以便不会重写。

#4


0  

i think you want:

我想你想要:

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

#5


0  

$result = array();
foreach($row as $r) 
{
    if(isset($result[$r['sname']]))
    {
        array_push($result[$r['sname']], array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname'])));
    }
    else
    {
        $result[$r['sname']] = array('id' => $r['sid'], 'divisions' => array($r['did'] => $r['dname']))
    }
}

What you are currently doing is overwriting the entry for $result[$r['sname']], so it will only ever have one array in it.

你目前正在做的是覆盖$ result [$ r ['sname']]的条目,所以它只会有一个数组。

I use the if because $array[] = is quicker than array_push see php docs

我使用if因为$ array [] =比array_push更快看到php文档