1

我知道我的问题有点令人困惑,也与其他问题相似。但它在某些方面有点不同。

基本上我在 PHP 中有这个多维数组,有 6 个“维度”。

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

$array1[$array2[val1][val2]][$array2[val3][val4]] = $array2[val4][val5];

因此,我们一次将一个值添加到 $array1 一个字符串。

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

因此,例如(我将使用食物)$array2 将具有它的值

fruit
 green
  apple
   grape
cereal
 corn
  wheeties
fruit
 blue
  blueberries

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

fruit
 green
  apple
   grape
 blue
  blueberries
cereal
 corn
  wheeties

更新代码:

            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 数组中。数据按类别划分,实际数据块如下所示:

Babyfood, cereal, rice, with mixed fruit, junior - 100 g (100 g)

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

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

变量的声明:

$h = 0;
$p = array();
$main=0;
$cat1=0;
$cat2=0;
$cat3=0;
$cat4=0;
$cat5=0;
$cat6=0;
$realFoods=array();

我一直在寻找很多。这是我的问题的一个较小版本:

PHP - 合并多维数组中的重复数组键

但我需要把它放大以支持很多维度。我只是不知道从哪里开始:/

4

1 回答 1

0

试试这个函数来合并并保留你的关键“主题”数组:

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

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

于 2012-10-25T02:17:11.750 回答