0

こんにちは、次のような配列が3つあり、その中に別のいくつかの配列があります。

array(3) {
  [0]=>
  array(2) {
    ["disease_id"]=>
    array(13) {
      [0]=>
      string(1) "5"
      [1]=>
      string(2) "14"
      [2]=>
      string(2) "12"
      [3]=>
      string(2) "17"
      [4]=>
      string(2) "16"
      [5]=>
      string(2) "15"
      [6]=>
      string(1) "4"
      [7]=>
      string(1) "3"
      [8]=>
      string(2) "18"
      [9]=>
      string(1) "9"
      [10]=>
      string(1) "2"
      [11]=>
      string(2) "20"
      [12]=>
      string(1) "1"
    }
    ["params"]=>
    object(stdClass)#160 (39) {
      ["disease_cpe_5"]=>
      string(1) "1"
      ["disease_mbr_5"]=>
      string(4) "1234"
      ["disease_mtr_5"]=>
      string(2) "12"
      ["disease_cpe_14"]=>
      string(1) "1"
      ["disease_mbr_14"]=>
      string(1) "2"
      ["disease_mtr_14"]=>
      string(1) "2"
      ["disease_cpe_12"]=>
      string(2) "12"
      ["disease_mbr_12"]=>
      string(2) "12"
      ["disease_mtr_12"]=>
      string(2) "12"
      ["disease_cpe_17"]=>
      string(1) "4"
      ["disease_mbr_17"]=>
      string(1) "1"
      ["disease_mtr_17"]=>
      string(1) "1"
      ["disease_cpe_16"]=>
      string(1) "4"
      ["disease_mbr_16"]=>
      string(2) "21"
      ["disease_mtr_16"]=>
      string(3) "122"
      ["disease_cpe_15"]=>
      string(3) "132"
      ["disease_mbr_15"]=>
      string(3) "132"
      ["disease_mtr_15"]=>
      string(1) "1"
      ["disease_cpe_4"]=>
      string(1) "1"
      ["disease_mbr_4"]=>
      string(1) "1"
      ["disease_mtr_4"]=>
      string(1) "9"
      ["disease_cpe_3"]=>
      string(1) "7"
      ["disease_mbr_3"]=>
      string(1) "8"
      ["disease_mtr_3"]=>
      string(1) "9"
      ["disease_cpe_18"]=>
      string(1) "1"
      ["disease_mbr_18"]=>
      string(1) "1"
      ["disease_mtr_18"]=>
      string(1) "1"
      ["disease_cpe_9"]=>
      string(1) "3"
      ["disease_mbr_9"]=>
      string(1) "3"
      ["disease_mtr_9"]=>
      string(1) "3"
      ["disease_cpe_2"]=>
      string(1) "3"
      ["disease_mbr_2"]=>
      string(1) "3"
      ["disease_mtr_2"]=>
      string(1) "3"
      ["disease_cpe_20"]=>
      string(2) "10"
      ["disease_mbr_20"]=>
      string(2) "11"
      ["disease_mtr_20"]=>
      string(2) "12"
      ["disease_cpe_1"]=>
      string(1) "1"
      ["disease_mbr_1"]=>
      string(1) "3"
      ["disease_mtr_1"]=>
      string(1) "3"
    }
  }
  [1]=>
  array(3) {
    ["disease_id"]=>
    array(8) {
      [0]=>
      string(1) "5"
      [1]=>
      string(2) "14"
      [2]=>
      string(2) "12"
      [3]=>
      string(2) "17"
      [4]=>
      string(2) "16"
      [5]=>
      string(1) "8"
      [6]=>
      string(2) "15"
      [7]=>
      string(1) "4"
    }
    ["risk_id"]=>
    array(1) {
      [0]=>
      string(1) "4"
    }
    ["params"]=>
    object(stdClass)#235 (27) {
      ["disease_cpe_5"]=>
      string(1) "2"
      ["disease_mbr_5"]=>
      string(1) "1"
      ["disease_mtr_5"]=>
      string(1) "1"
      ["disease_cpe_14"]=>
      string(1) "2"
      ["disease_mbr_14"]=>
      string(1) "2"
      ["disease_mtr_14"]=>
      string(1) "2"
      ["disease_cpe_12"]=>
      string(2) "12"
      ["disease_mbr_12"]=>
      string(2) "12"
      ["disease_mtr_12"]=>
      string(2) "12"
      ["disease_cpe_17"]=>
      string(1) "1"
      ["disease_mbr_17"]=>
      string(1) "1"
      ["disease_mtr_17"]=>
      string(1) "1"
      ["disease_cpe_16"]=>
      string(1) "1"
      ["disease_mbr_16"]=>
      string(1) "5"
      ["disease_mtr_16"]=>
      string(1) "6"
      ["disease_cpe_8"]=>
      string(2) "11"
      ["disease_mbr_8"]=>
      string(1) "1"
      ["disease_mtr_8"]=>
      string(1) "1"
      ["disease_cpe_15"]=>
      string(3) "132"
      ["disease_mbr_15"]=>
      string(3) "132"
      ["disease_mtr_15"]=>
      string(1) "1"
      ["disease_cpe_4"]=>
      string(1) "7"
      ["disease_mbr_4"]=>
      string(1) "8"
      ["disease_mtr_4"]=>
      string(1) "9"
      ["risk_cpe_4"]=>
      string(1) "1"
      ["risk_mbr_4"]=>
      string(1) "2"
      ["risk_mtr_4"]=>
      string(1) "3"
    }
  }
  [2]=>
  array(3) {
    ["disease_id"]=>
    array(6) {
      [0]=>
      string(1) "5"
      [1]=>
      string(2) "14"
      [2]=>
      string(2) "12"
      [3]=>
      string(1) "8"
      [4]=>
      string(2) "15"
      [5]=>
      string(1) "4"
    }
    ["risk_id"]=>
    array(2) {
      [0]=>
      string(1) "4"
      [1]=>
      string(1) "3"
    }
    ["params"]=>
    object(stdClass)#184 (24) {
      ["disease_cpe_5"]=>
      string(1) "2"
      ["disease_mbr_5"]=>
      string(1) "1"
      ["disease_mtr_5"]=>
      string(1) "1"
      ["disease_cpe_14"]=>
      string(1) "2"
      ["disease_mbr_14"]=>
      string(1) "2"
      ["disease_mtr_14"]=>
      string(1) "2"
      ["disease_cpe_12"]=>
      string(2) "12"
      ["disease_mbr_12"]=>
      string(2) "12"
      ["disease_mtr_12"]=>
      string(2) "12"
      ["disease_cpe_8"]=>
      string(2) "11"
      ["disease_mbr_8"]=>
      string(1) "1"
      ["disease_mtr_8"]=>
      string(1) "1"
      ["disease_cpe_15"]=>
      string(3) "132"
      ["disease_mbr_15"]=>
      string(3) "132"
      ["disease_mtr_15"]=>
      string(1) "1"
      ["disease_cpe_4"]=>
      string(1) "7"
      ["disease_mbr_4"]=>
      string(1) "8"
      ["disease_mtr_4"]=>
      string(1) "9"
      ["risk_cpe_4"]=>
      string(1) "1"
      ["risk_mbr_4"]=>
      string(1) "2"
      ["risk_mtr_4"]=>
      string(1) "3"
      ["risk_cpe_3"]=>
      string(1) "5"
      ["risk_mbr_3"]=>
      string(1) "5"
      ["risk_mtr_3"]=>
      string(1) "5"
    }
  }
}

ここで、これらの配列を 1 つにマージする必要があり、["disease_id"] と ["risk_id"] サブ配列で値が一致する場所で、重複を削除する必要がありますが、キーが ["params"] で一致する場合両方の値を保持し、重複したキーをオブジェクトにダンプする必要があるため、次のような結果になります。

array(1) {
      [0]=>
      array(2) {
        ["disease_id"]=>
        array(13) {
          [0]=>
          string(1) "5"
          [1]=>
          string(2) "14"
          [2]=>
          string(2) "12"
          [3]=>
          string(2) "17"
          [4]=>
          string(2) "16"
          [5]=>
          string(2) "15"
          [6]=>
          string(1) "4"
          [7]=>
          string(1) "3"
          [8]=>
          string(2) "18"
          [9]=>
          string(1) "9"
          [10]=>
          string(1) "2"
          [11]=>
          string(2) "20"
          [12]=>
          string(1) "1"
          [13]=>
          string(1) "8"
        }
        ["risk_id"]=>
        array(1) {
          [0]=>
          string(1) "4"
          [1]=>
          string(1) "3"
        }
        ["params"]=>
        object(stdClass)#160 (39) {
          ["disease_cpe_5"]=>
          string(7) "1, 1, 2"
          ["disease_mbr_5"]=>
          string(10) "1234, 1, 1"
          ["disease_mtr_5"]=>
          string(8) "12, 1, 1"
          ["disease_cpe_14"]=>
          string(7) "1, 2, 2"
          ["disease_mbr_14"]=>
          string(7) "2, 2, 2"
          ["disease_mtr_14"]=>
          string(7) "2, 2, 2"
          ["disease_cpe_12"]=>
          string(10) "12, 12, 12"
          ["disease_mbr_12"]=>
          string(10) "12, 12, 12"
          ["disease_mtr_12"]=>
          string(10) "12, 12, 12"
          ["disease_cpe_17"]=>
          string(4) "4, 1"
          ["disease_mbr_17"]=>
          string(4) "1, 1"
          ["disease_mtr_17"]=>
          string(4) "1, 1"
          ["disease_cpe_16"]=>
          string(4) "4, 1"
          ["disease_mbr_16"]=>
          string(5) "21, 5"
          ["disease_mtr_16"]=>
          string(3) "122,6"
          ["disease_cpe_8"]=>
          string(6) "11, 11"
          ["disease_mbr_8"]=>
          string(1) "1, 1"
          ["disease_mtr_8"]=>
          string(1) "1, 1"
          ["disease_cpe_15"]=>
          string(13) "132, 132, 132"
          ["disease_mbr_15"]=>
          string(13) "132, 132, 132"
          ["disease_mtr_15"]=>
          string(7) "1, 1, 1"
          ["disease_cpe_4"]=>
          string(7) "1, 7, 7"
          ["disease_mbr_4"]=>
          string(7) "1, 8, 8"
          ["disease_mtr_4"]=>
          string(7) "9, 9, 9"
          ["disease_cpe_3"]=>
          string(1) "7"
          ["disease_mbr_3"]=>
          string(1) "8"
          ["disease_mtr_3"]=>
          string(1) "9"
          ["disease_cpe_18"]=>
          string(1) "1"
          ["disease_mbr_18"]=>
          string(1) "1"
          ["disease_mtr_18"]=>
          string(1) "1"
          ["disease_cpe_9"]=>
          string(1) "3"
          ["disease_mbr_9"]=>
          string(1) "3"
          ["disease_mtr_9"]=>
          string(1) "3"
          ["disease_cpe_2"]=>
          string(1) "3"
          ["disease_mbr_2"]=>
          string(1) "3"
          ["disease_mtr_2"]=>
          string(1) "3"
          ["disease_cpe_20"]=>
          string(2) "10"
          ["disease_mbr_20"]=>
          string(2) "11"
          ["disease_mtr_20"]=>
          string(2) "12"
          ["disease_cpe_1"]=>
          string(1) "1"
          ["disease_mbr_1"]=>
          string(1) "3"
          ["disease_mtr_1"]=>
          string(1) "3"
          ["risk_cpe_4"]=>
          string(1) "1, 1"
          ["risk_mbr_4"]=>
          string(1) "2, 2"
          ["risk_mtr_4"]=>
          string(1) "3, 3"
          ["risk_cpe_3"]=>
          string(1) "5"
          ["risk_mbr_3"]=>
          string(1) "5"
          ["risk_mtr_3"]=>
          string(1) "5"
        }
      }
    }

私は多くのことを試しましたが、この問題を効果的に解決する答えが見つかりませんでした. これが私の試みの1つです:

$newArray = array();
        if( !is_object($newArray["parpams"]) ){
            $newArray["parpams"] = new StdClass();
        }
        foreach ($selected as $key => $value){
            foreach ($selected as $key_i => $value_i){
                if (is_array($value["disease_id"]) && is_array($value_i["disease_id"])){
                    $has = (count(array_intersect($value["disease_id"], $value_i["disease_id"]))) ? true : false;
                    if($has){
                        foreach ($value["disease_id"] as $pointer => $disease){
                            if (in_array($disease, $value["disease_id"])){
                                $newArray["disease_id"][] = $selected[$key]["disease_id"][$pointer];
                                unset($selected[$key]["disease_id"][$pointer]);

                                $cpe = "disease_cpe_".$disease;
                                $mbr = "disease_mbr_".$disease;
                                $mtr = "disease_mtr_".$disease;
                                if ($newArray["parpams"]->$cpe){
                                    $newArray["parpams"]->$cpe = $newArray["parpams"]->$cpe.', '. $selected[$key]["params"]->$cpe;
                                } else {
                                    $newArray["parpams"]->$cpe = $selected[$key]["params"]->$cpe;
                                }
                                if ($newArray["parpams"]->$mbr){
                                    $newArray["parpams"]->$mbr = $newArray["parpams"]->$mbr.', '. $selected[$key]["params"]->$mbr;
                                } else {
                                    $newArray["parpams"]->$mbr = $selected[$key]["params"]->$mbr;
                                }
                                if ($newArray["parpams"]->$mtr){
                                    $newArray["parpams"]->$mtr = $newArray["parpams"]->$mtr.', '. $selected[$key]["params"]->$mtr;
                                } else {
                                    $newArray["parpams"]->$mtr = $selected[$key]["params"]->$mtr;
                                }
                                unset($selected[$key]["params"]->$cpe);
                                unset($selected[$key]["params"]->$mbr);
                                unset($selected[$key]["params"]->$mtr);
                            }
                        }
                    }
                }
                if (is_array($value["risk_id"]) && is_array($value_i["risk_id"])){
                    $has = (count(array_intersect($value["risk_id"], $value_i["risk_id"]))) ? true : false;
                    if($has){
                        foreach ($value["risk_id"] as $pointer => $risk){
                            if (in_array($risk, $value["risk_id"])){
                                $newArray["risk_id"][] = $selected[$key]["risk_id"][$pointer];
                                unset($selected[$key]["risk_id"][$pointer]);

                                $cpe = "risk_cpe_".$risk;
                                $mbr = "risk_mbr_".$risk;
                                $mtr = "risk_mtr_".$risk;
                                if ($newArray["parpams"]->$cpe){
                                    $newArray["parpams"]->$cpe = $newArray["parpams"]->$cpe.', '. $selected[$key]["params"]->$cpe;
                                } else {
                                    $newArray["parpams"]->$cpe = $selected[$key]["params"]->$cpe;
                                }
                                if ($newArray["parpams"]->$mbr){
                                    $newArray["parpams"]->$mbr = $newArray["parpams"]->$mbr.', '. $selected[$key]["params"]->$mbr;
                                } else {
                                    $newArray["parpams"]->$mbr = $selected[$key]["params"]->$mbr;
                                }
                                if ($newArray["parpams"]->$mtr){
                                    $newArray["parpams"]->$mtr = $newArray["parpams"]->$mtr.', '. $selected[$key]["params"]->$mtr;
                                } else {
                                    $newArray["parpams"]->$mtr = $selected[$key]["params"]->$mtr;
                                }
                                unset($selected[$key]["params"]->$cpe);
                                unset($selected[$key]["params"]->$mbr);
                                unset($selected[$key]["params"]->$mtr);
                            }
                        }
                    }
                }
            }
        }

別の試みを次に示します。

$newArray = array();
            $newArray["disease_id"] = array();
            $newArray["risk_id"] = array();
            if( !is_object($newArray["parpams"]) ){
                $newArray["parpams"] = new StdClass();
            }
            foreach ($selected as $key => $value){
                foreach ($selected as $key_i => $value_i){
                    if (is_array($value["disease_id"]) && is_array($value_i["disease_id"])){
                        $has = (count(array_intersect($value["disease_id"], $value_i["disease_id"]))) ? true : false;
                        if($has){
                            $newArray["disease_id"] =  array_merge($value["disease_id"], $value_i["disease_id"],$newArray["disease_id"]);
                        }
                    }
                    if (is_array($value["risk_id"]) && is_array($value_i["risk_id"])){
                        $has = (count(array_intersect($value["risk_id"], $value_i["risk_id"]))) ? true : false;
                        if($has){
                            $newArray["risk_id"] =  array_merge($value["risk_id"], $value_i["risk_id"],$newArray["risk_id"]);
                        }
                    }
                }
                $newArray["disease_id"] = array_unique($newArray["disease_id"]);
                $newArray["risk_id"] = array_unique($newArray["risk_id"]);
            }

        }

アウトパットは:

array(3) {
  ["disease_id"]=>
  array(14) {
    [0]=>
    string(1) "5"
    [1]=>
    string(2) "14"
    [2]=>
    string(2) "12"
    [3]=>
    string(1) "8"
    [4]=>
    string(2) "15"
    [5]=>
    string(1) "4"
    [21]=>
    string(2) "17"
    [22]=>
    string(2) "16"
    [39]=>
    string(1) "3"
    [40]=>
    string(2) "18"
    [41]=>
    string(1) "9"
    [42]=>
    string(1) "2"
    [43]=>
    string(2) "20"
    [44]=>
    string(1) "1"
  }
  ["risk_id"]=>
  array(2) {
    [0]=>
    string(1) "4"
    [1]=>
    string(1) "3"
  }
  ["parpams"]=>
  object(stdClass)#236 (0) {
  }
}

しかし、['params'] はまだ含まれていません。

私はスタックオーバーフローに関する多くのトレッドを読みましたが、実際にはこの複雑さに対処していません。スレッドを見逃した場合は、その方向に向けてください。これらの配列は最大 20 の配列になる可能性があることに注意してください。タンク!

4

1 に答える 1