![](/img/trans.png)
[英]Defining multidimensional array while storing form data in JSON format in 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.