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文档