首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据存储到多维数组中的PHP

将数据存储到多维数组中的PHP
EN

Stack Overflow用户
提问于 2016-03-23 02:33:10
回答 1查看 408关注 0票数 1

我有一个数组,其中第1项是类别的键,第2项是该类别的名称,第3项是子类别的键,第4项是子类别的名称,第5项是子类别的键.我想将数据存储到一个新的数组中,其中键将携带层次结构。因此,它应该是这样的:

代码语言:javascript
复制
$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循环来实现上述行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 04:58:41

我不认为这个确切的要求是可能的。假设$dat[$ar[1]][$ar[3]] = $ar[4]$dat[$ar[1]] = array($ar[3] => $ar[4])相同。这意味着您要两次分配$dat[$ar[1]],如下所示:

代码语言:javascript
复制
$dat[$ar[1]] = $ar[2];
$dat[$ar[1]] = array($ar[3] => $ar[4]);

它覆盖了第一个值,使其毫无意义。也许你真正想要的是:

代码语言:javascript
复制
$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'),然后尝试如下:

代码语言:javascript
复制
$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>';

那么您的输出将类似于:

代码语言:javascript
复制
Array
(
    [color] => Array
        (
            [value] => blue
            [type] => Array
                (
                    [value] => plant
                    [flower] => Array
                        (
                            [value] => tulip
                        )
                )
        )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36168791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档