簡體   English   中英

PHP將數據存儲到多維數組中

[英]PHP storing data into a multidimensional array

我有一個數組,其中第一項是一個類別的鍵,第二項是該類別的名稱,第三項是子類別的鍵,第四項是其子名稱,第五項是子子類的鍵...我想要將數據存儲到一個新的數組中,其中鍵將承載層次結構。 因此,它看起來像這樣:

$dat[$ar[1]] = $ar[2];
$dat[$ar[1]][$ar[3]] = $ar[4];
$dat[$ar[1]][$ar[3]][$ar[5]] = $ar[6];
$dat[$ar[1]][$ar[3]][$ar[5]][$ar[7]] = $ar[8];
etc.

$ ar的項目數和因此$ dat的深度是固定的。 如何編寫一個for循環來實現上述行為?

我不認為確切的要求是可能的。 考慮$dat[$ar[1]][$ar[3]] = $ar[4]$dat[$ar[1]] = array($ar[3] => $ar[4]) 這意味着你試圖像這樣兩次分配$dat[$ar[1]]

$dat[$ar[1]] = $ar[2];
$dat[$ar[1]] = array($ar[3] => $ar[4]);

它會覆蓋第一個值並使其毫無意義。 也許您真正想要的是這樣的:

$dat[$ar[0]]['value'] = $ar[1];
$dat[$ar[0]][$ar[2]]['value'] = $ar[3];
$dat[$ar[0]][$ar[2]][$ar[4]]['value'] = $ar[5];
$dat[$ar[0]][$ar[2]][$ar[4]][$ar[6]]['value'] = $ar[7];

這也希望'value'永遠不是$ar數組中用作鍵的值。 為簡單起見,我假設您使用的是基於0的標量數組,例如$ar = array('color','blue','type','plant','flower','tulip')然后試試這個:

$dat = array();
$pnt = &$dat;
$cnt = count($ar);
for ($key=0; $key < $cnt; $key+=2) {
    $value = $ar[$key];
    $pnt[$value]['value'] = $ar[$key + 1];  // we assign it to the key 'value' of the current array dimension
    $pnt = &$pnt[$value]; // we now point to the new array dimension
}
echo '<pre>';
print_r($dat);
echo '</pre>';

那么您的輸出將是:

Array
(
    [color] => Array
        (
            [value] => blue
            [type] => Array
                (
                    [value] => plant
                    [flower] => Array
                        (
                            [value] => tulip
                        )
                )
        )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM