PHP 多维数组算法?

4
我需要按照以下格式形成一个多维数组,但我无法想出算法。
array(
      [0]=>array(
            "id"=>"1","data"=>array([0]=>array("kid"=>"434","k"=>"Ali","m"=>"msj1"), [1]=>array("kid"=>"344","k"=>"Dali","m"=>"msj3")),
      [1]=>array(
            "id"=>"2","data"=>array([0]=>array("kid"=>"347","k"=>"Cenk","m"=>"msj2"), [1]=>array("kid"=>"345","k"=>"Tan","m"=>"msj4")))

数据来自于以下类似的mysql查询语句:

SELECT kid, k, m, id FROM table1 WHERE rid=1 ORDER BY (id)

样例数据:

id   kid   k    m
1    434  Ali  msj1
2    347  Cenk msj2
1    344  Dali msj3
2    345  Tan  msj4

PHP循环如下:

do {
//whatever I tried here failed :(
} while ($t = mysql_fetch_assoc($r_tav));

我希望通过这个样例能更好地理解多维数组。


在这里,do-while循环不是你的朋友,因为你将无法在循环中访问$t数组。 - Narcis Radu
Ali Aktaş,请编辑一下示例数组,这样我才能更好地帮助。 - Utku Yıldırım
我认为应该有一个虚拟变量来检查“id”是否发生变化。根据id的变化,应该形成一个新的数组来保存其他数据数组。但不知何故,我无法编写代码。 - aliaktas
2个回答

4
似乎你想要的就是:
while ($t = mysql_fetch_assoc($r_tav)){
    $arr[] = $t;
}

并且$arr将包含您的数组

重新阅读问题之后,似乎这不是您想要的确切结构,但可以简单地转换为:

while ($t = mysql_fetch_assoc($r_tav)){
    $arr[] = array('id' => $r_tav['id'],
                   'data' => array('kid' => $r_tav['kid'],
                                    'k' => $r_tav['k'],
                                    'm' => $r_tav['m']));
}

我希望它能够如此简单,但是正如你所看到的,有嵌套的数组包含与相同ID相关的数据。 - aliaktas
我更新了帖子,并添加了一段代码片段,应该能够生成正确的数组。 - Jan Dragsbaek
这个问题已经得到改进,但是我该如何将具有相同ID的数据收集到一个名为“data”的数组中? - aliaktas
这超出了原问题的范围,并增加了一个新的复杂度层次。 - Jan Dragsbaek
我犯了错误,完全写下了最终数组,现在我们有了解决方案。希望它能帮助其他有同样需求的人。感谢你的努力。 - aliaktas

4
$arrRows = mysql_fetch_array($r_tav);
$arrRowData = array();
$arrRowDataFinal = array();
foreach ($arrRows as $key => $value){
    $arrRowData[$value['id']][] = array("kid"=>$value['kid'],"k"=>$value['k'],"m"=>$value['m']);
}
foreach($arrRowData as $key => $value){
    $arrRowDataFinal[] = array('id' => $key, 'data' => $value);
}

我尝试了这段代码,它以正确的格式生成了数组,但是它未能收集共同的“id”数组中的数据。我将继续努力生成正确的输出。 - aliaktas
你的解决方案是正确的,除了我们需要将原始数据数组形成为$arrRows。我用以下代码实现了这个功能:$t = mysql_fetch_assoc($r_tav); $row_sayi = mysql_num_rows($r_tav); if ($row_sayi > 0) { do { $tav_a[]=$t; $op=$t; } while ($t = mysql_fetch_assoc($r_tav)); } $arrRows = $tav_a;如果有更好的生成上述数组的方法,欢迎提供。谢谢Poonam,谢谢stackoverflow。 - aliaktas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接