3

2 つの配列があり、そのキーが最初の配列キーと一致する場合にのみ、2 番目の配列から値のみを抽出したいと考えています。

私の最初の配列は

 [deal_id] => Array
    (
        [0] => Array
            (
                [0] => 75
                [5] => 76
                [10] => 77
                [15] => 79
            )

        [1] => Array
            (
                [0] => 84
            )

        [2] => Array
            (
                [0] => 86
                [3] => 88
                [8] => 89
            )

        [3] => Array
            (
                [0] => 97
            )

        [4] => Array
            (
                [0] => 100
                [4] => 104
            )

    )

私の2番目の配列は

 [package_id] => Array
    (
        [0] => Array
            (
                [0] => 10
                [1] => 75
                [2] => 75
                [3] => 75
                [4] => 75
                [5] => 67
                [6] => 34
                [7] => 89
                [10] => 04
                [15] => 75
            )

        [1] => Array
            (
                [0] => 10
                [1] => 29
                [2] => 34
                [3] => 45
            )

        [2] => Array
            (
                [0] => 12
                [3] => 23
                [4] => 45
                [5] => 76
                [6] => 87
                [8] => 45
            )

        [3] => Array
            (
                [0] => 34
                [1] => 54
                [2] => 34

            )

        [4] => Array
            (
                [0] => 145
                [1] => 143
                [6] => 146
                [4] => 344
            )

    )

期待される出力:

[package_id] => Array
        (
            [0] => Array
                (
                    [0] => 10
                    [5] => 67
                    [10] => 04
                    [15] => 75
                )

            [1] => Array
                (
                    [0] => 10

                )

            [2] => Array
                (
                    [0] => 12
                    [3] => 23
                    [8] => 45
                )

            [3] => Array
                (
                    [0] => 34

                )

            [4] => Array
                (
                    [0] => 145
                    [4] => 344

                )

        )

キーが最初の配列と一致する 2 番目の配列の値のみが必要です。値を除いて、2 番目の配列を最初の配列とまったく同じに見せたいと思います。

ありがとう

4

4 に答える 4

0

助けてくれてありがとう。上記の提案から手がかりを取ります。私はついに答えを得ました。

動作するコードは次のとおりです。

 foreach ($deal_ids as $dealkey => $dealval) {
            foreach ($dealval as $dkey => $dval) {
                foreach ($deal_duration as $dukey => $duval) {
                    foreach ($duval as $deukey => $deuval) {

                        if ($dkey == $deukey) {
                            $dur[$dealkey][$deukey] = $deuval;
                        }
                    }
                }
            }
        }
于 2012-12-19T11:20:19.090 に答える
0

いくつかの for ループで行うのが最善だと思います。それほど効率的ではありませんが、私の知る限り、これを行う自動化された方法はありません。

これがまさにあなたが望むものかどうかはわかりませんが、それが始まりかもしれません。したがって、コードを単にコピーするだけではなく (テストされていないため、おそらく機能しないため)、独自のコードを作成するのに適している可能性があります。

for($arr1 as $key11 => $val11){
    if(isset($arr2[$key11])){
        $contains = false;
        for($val11 as $key12 => $val12){
            if(isset($arr2[$key11][$key12]){
                // Contains
                $contains = true;
            }
        }
        if(!$contains){
            // Doesn't contain
        }
    }
}
于 2012-12-19T10:56:20.270 に答える
0

私はあなたの配列をこれに複製しようとします:

$deal = array(
    array(
        0=>75, 5=>76, 10=>77, 15=>79,
    ),
    array(
        0=>84,
    ),
    array(
        0=>86, 3=>88, 8=>89,
    ),
);

$package = array(
    array(
        0=>10, 1=>75, 2=>75, 3=>75, 4=>75, 5=>67, 6=>34, 7=>89, 10=>04, 15=>75,
    ),
    array(
        0=>10, 1=>29, 2=>34, 3=>45,
    ),
    array(
        0=>12, 3=>23, 4=>45, 5=>76, 6=>87, 8=>45,
    ),
);

次のスニペットを使用して処理します。

$result = array();

foreach($deal as $key => $value){
    foreach($value as $key2 => $value2){
        if(array_key_exists($key2, $package[$key])){
            if(!isset($key, $result)){
                $result[$key] = array();
            }
            $result[$key][$key2] = $package[$key][$key2];
        }
    }
}

注:ここでの本当のトリックは、 array_key_exists() を使用して、問題のキーが$package配列に存在するかどうかを確認することです。

次の結果が得られます。

Array
(
    [0] => Array
        (
            [0] => 10
            [5] => 67
            [10] => 4
            [15] => 75
        )

    [1] => Array
        (
            [0] => 10
        )

    [2] => Array
        (
            [0] => 12
            [3] => 23
            [8] => 45
        )

)
于 2012-12-19T11:09:01.140 に答える
0

小さな配列にループして、このarray_intersect_keyを使用するだけです。

于 2012-12-19T12:16:38.847 に答える