首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP如何将数组添加到另一个具有相同键名的数组中,而不是替换当前存在的数组

PHP如何将数组添加到另一个具有相同键名的数组中,而不是替换当前存在的数组
EN

Stack Overflow用户
提问于 2012-10-25 10:14:30
回答 1查看 1.6K关注 0票数 1

我知道我的问题有点令人困惑,而且和其他问题也很相似。但它在一些方面略有不同。

基本上,我在PHP中有一个多维数组,大约有6个“维数”。

我正在构建,我们称它为$array1,由一大堆值组成,这些值都存储在一个不同的数组中,我们称之为$array2。$array2的组织方式是,当您将其映射到6个数组级别时,它是有意义的。因此,我将如何从$array2在$array1中创建值的示例如下:

代码语言:javascript
复制
$array1[$array2[val1][val2]][$array2[val3][val4]] = $array2[val4][val5];

所以我们在$array1中添加一个值,一次一个字符串。

我遇到的问题是,$array2并不总是按主题组织的。

例如(我将使用食物) $array2将具有作为它的值

代码语言:javascript
复制
fruit
 green
  apple
   grape
cereal
 corn
  wheeties
fruit
 blue
  blueberries

我使用了一些间距,以便更好地阅读它,这样当第二次输入水果时,它会覆盖第一个输入的水果。相反,我想合并它们,这样$array1看起来就像

代码语言:javascript
复制
fruit
 green
  apple
   grape
 blue
  blueberries
cereal
 corn
  wheeties

更新的代码:

代码语言:javascript
复制
            for($r = 0; $r<=$splitUpLength; $r++) {
                if($r == 0) {

                    if ($splitUp[$r]==$p[$main][$cat1]) {
                    } else {    
                        $cat1++;
                        $p[$main][$cat1] = $splitUp[$r];
                        //echo $p[$main][$cat1];
                        //echo "<br>";

                    }

                }

                if ($r == 1) {
                    $main++;
                    if ($splitUp[$r] == $p[$main][$cat2]) {

                    } else {
                        $cat2++;
                        $p[$main][$cat2] = $splitUp[$r];
                        //echo "-".$p[$main][$cat2];
                        //echo "<br>";
                        if (strpos($p[$main][$cat2],'-') !== false) {
                            $realFoods[$p[$main-1][$cat1]] = $p[$main][$cat2];

                            continue;
                        }

                    }

                }

                if ($r == 2) {
                    $main++;
                    if ($splitUp[$r] == $p[$main][$cat3]) {
                    } else {
                        $cat3++;
                        $p[$main][$cat3] = $splitUp[$r];
                        //echo "--".$p[$main][$cat3];
                        //echo "<br>";
                        if (strpos($p[$main][$cat3],'-') !== false) {
                            $realFoods[$p[$main-2][$cat1]][$p[$main-1][$cat2]] = $p[$main][$cat3];

                            continue;
                        }

                    }
                }

                if ($r == 3) {
                    $main++;
                    if ($splitUp[$r] == $p[$main][$cat4]) {

                    } else {
                        $cat4++;
                        $p[$main][$cat4] = $splitUp[$r];
                        //echo "---".$p[$main][$cat4];
                        //echo "<br>";
                        if (strpos($p[$main][$cat4],'-') !== false) {
                            $realFoods[$p[$main-3][$cat1]][$p[$main-2][$cat2]][$p[$main-1][$cat3]] = $p[$main][$cat4];

                            continue;
                        }

                    }
                }

                if ($r == 4) {
                    $main++;
                    if ($splitUp[$r] == $p[$main][$cat5]) {

                    } else {
                        $cat5++;
                        $p[$main][$cat5] = $splitUp[$r];
                        //echo "----".$p[$main][$cat5];
                        //echo "<br>";
                        if (strpos($p[$main][$cat5],'-') !== false) {
                            $realFoods[$p[$main-4][$cat1]][$p[$main-3][$cat2]][$p[$main-2][$cat3]][$p[$main-1][$cat4]] = $p[$main][$cat5];

                            continue;
                        }

                    }
                }

                if ($r == 5) {
                    $main++;
                    if ($splitUp[$r] == $p[$main][$cat6]) {

                    } else {
                        $cat6++;
                        $p[$main][$cat6] = $splitUp[$r];
                        //echo "-----".$p[$main][$cat6];
                        //echo "<br>";
                        if (strpos($p[$main][$cat6],'-') !== false) {
                            $realFoods[$p[$main-5][$cat1]][$p[$main-4][$cat2]][$p[$main-3][$cat3]][$p[$main-2][$cat4]][$p[$main-1][$cat5]] = $p[$main][$cat6];

                            continue;
                        }

                    }
                }



            }
            $main=0;
            $h++;
            //echo $h." ";
        }

    }

所以很明显这是很多的

我基本上是拆分数据并将它们存储在$p数组中。数据按分类进行拆分,实际的数据片段如下所示:

代码语言:javascript
复制
Babyfood, cereal, rice, with mixed fruit, junior - 100 g (100 g)

所以我用",“将它们分开,一旦检测到"-”,它就会将所有相关信息加载到主数组$realFoods中

因为数据中的一些目录出现了两次,比如谷类可能出现两次,所以它取代了已经添加的谷类项目。我不想替换,而是想将所有内容都添加到该谷物类别/数组中

变量的解密:

代码语言:javascript
复制
$h = 0;
$p = array();
$main=0;
$cat1=0;
$cat2=0;
$cat3=0;
$cat4=0;
$cat5=0;
$cat6=0;
$realFoods=array();

我找了很久了。这是我的问题的一个小版本:

PHP - Merge duplicate array keys in a multidimensional array

但我需要将其放大以支持更多维度。我不知道从何说起:/

EN

回答 1

Stack Overflow用户

发布于 2012-10-25 10:17:12

尝试这个函数来合并并保留你的key "subject“数组:

http://php.net/manual/en/function.array-merge-recursive.php

顺便说一句,PHP将尝试数组的每个元素并合并到

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13060640

复制
相关文章

相似问题

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