1

私の質問がややこしく、他の質問と似ていることは承知しています。しかし、いくつかの点で少し異なります。

基本的に、私はPHPでこの多次元配列を6つの「次元」で持っています。

私が構築しているのは、$array1 と呼びましょう。これは、$array2 と呼ぶ別の配列に格納されている一連の値から構成されています。$array2 は、6 つの配列レベルにわたってマップするときに意味があるように構成されています。したがって、$array2 から $array1 に値を作成する方法の例は次のようになります。

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

そのため、$array1 に値を一度に 1 つの文字列として追加しています。

私が抱えている問題は、 $array2 が常に件名で編成されているとは限らないことです。

たとえば、(私は食べ物を使用します) $array2 の値は

fruit
 green
  apple
   grape
cereal
 corn
  wheeties
fruit
 blue
  blueberries

読みやすくするためにスペースを使用したので、2 回目に果物が来ると、最初に入力された果物が上書きされます。代わりに、それらをマージしたいので、 $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 にロードします

シリアルが 2 回出現するように、データ内のいくつかのカテゴリーが 2 回出現するため、既に追加されているシリアル項目が置き換えられます。置き換える代わりに、すべてをその穀物カテゴリ/配列に追加したいと思います

変数の宣言:

$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 に答える