PHP在递归过程中保留数组键


PHP preserve array keys on recursive procedure

hi有这个过程来创建新闻的数组链

public function getNewsChain(&$chain, $itemID,$langID, $direction="prev") {
    $langID = $this->db->lngPatch($langID);
    $where = ($direction == "prev") ? "n.ID='$itemID'" : "ln.Rif='$itemID'";
    $qr = "SELECT n.ID, n.idSS, n.Data_News AS startDate, n.evento AS event, n.Data_Fine AS endDate, n.rifGeog,
                  ln.Titolo, ln.Corpo, ln.Link AS link, ln.Pretitolo, ln.sottoTitolo, ln.Immagine, ln.Rif, ln.idLng
             FROM news n LEFT JOIN lngnews ln ON n.ID=ln.idNews 
            WHERE $where AND ln.idLng='$langID'";
    if ($rs = $this->db->exQ($qr,$this->src, true, false)) {
        $row = $this->db->fetch($rs['RS']);
        $chain[$row['ID']] =  array("itemID"=>$row['ID'],
                          "langID"=>$this->db->lngPatchRev($row['idLng']),
                          "ssID"=>$row['idSS'],
                          "startDate"=>$row['startDate'],
                          "event"=>$row['event'],
                          "endDate"=>$row['endDate'],
                          "title"=>$row['Titolo'],
                          "body"=>$row['Corpo'],
                          "link"=>$row['link'],
                          "pretitle"=>$row['Pretitolo'],
                          "subtitle"=>$row['sottoTitolo'],
                          "geoRefer"=>$row['rifGeog'],
                          "image"=>$row['Immagine'],
                          "rif"=>$row['Rif']);
            if ($row['Rif'] != 0) { 
                $this->getNewsChain($chain, $row['Rif'],$row['idLng'], "prev"); 
            } else {
                $chain = array_reverse($chain);
                $this->getNewsChain($chain, $chain[count($chain)-1]['itemID'], $row['idLng'], "next"); 
            }
        } else {
            if ($row['Rif'] != 0) {
                $this->getNewsChain($chain, $row['ID'], $row['idLng'], "next");
            }
        }
    }
}

此过程返回一个正确的数组,但带有重置键。如何保存索引?

使用

array_reverse($chain, true);

阅读有关array_reverse 的更多信息

执行array_reverse­时需要保留密钥文档:

$chain = array_reverse($chain, TRUE);

默认情况下,如果没有第二个参数,则不会保留关键帧。

array_reverse($chain); --> array_reverse($chain, true);