1

両方の配列が多次元である場合、つまり異なる変数タイプを含むことができる場合、配列Aに配列Bのすべての項目が含まれているかどうかを確認したい(他の項目を含む場合がありますが、すべてを含む必要があります) 。

私はたくさん見てきました(特にthisthisthisthisthisおよびthisthisthisおよびthisも)。PHPドキュメントを読みました。私がチェックしたものはすべて、「配列から文字列への変換」通知で失敗します。特に、array_intersect()またはを使用する場合array_diff()

私は厳密なエラー チェックを使用しているため、通知は実際にはスクリプト全体の実行をさらに保留するものであり、一般的に好きではなく、避けたいものです。この場合は可能ですか?

私の配列Aは次のとおりです。

Array
(
    [0] => content/manage/index
    [Content] => Array
        (
            [title] => 
            [type] => 5
            [category] => 
            [recommended] => 
            [featured] => 
            [status] => 
            [views] => 
            [last_access_date] => 
            [creation_date] => 
            [modification_date] => 
            [availability_date] => 
            [author_id] => 
        )

)

私の配列Bは次のとおりです。

Array
(
    [0] => /content/manage/index
    [Content] => Array
        (
            [type] => 1
        )

)

array_intersectそれで、通知を受けずに異なる変数型を含む多次元配列で使用できる場合、私ができる方法はありますか?

4

1 に答える 1

0

私の問題(および質問)は、「配列から文字列への変換」通知が実際に何を意味するのかという誤解から生じました。私の場合、単次元配列で使用するように設計された関数を使用して多次元配列を歩こうとしていることを伝えようとしていました。

それを理解すると、数秒以内に解決策にたどり着きました。ここにはたくさんありますが、ここで deceze によって与えられたもの にとって最高に見えました. だから私はそれをそのような関数の形に採用しました:

function recursiveArrayIntersect($array1, $array2)
{
    $array1 = array_intersect_key($array1, $array2);

    foreach($array1 as $key=>&$value)
    {
        if(is_array($value)) $value = recursiveArrayIntersect($value, $array2[$key]);
    }

    return $array1;
}

私はそれを自分のプロジェクトとコーディングの方法に採用しましたが、すべてのクレジットはまだdecezeになっています(彼の答え here )!

これで、配列に含まれる変数の種類や深さ (サブ配列の数) に関係なく、ほぼすべての配列の共通部分を見つけることができます。

于 2013-09-23T06:52:05.433 に答える