0

私はこの多次元配列を持っています:

Array
(
    [userId] => 35
    [fieldId] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [4] => 4
        )

    [educationTitle] => Array
        (
            [0] => School1
            [1] => School2
            [2] => 3
            [4] => 
        )

    [educationDegree] => Array
        (
            [0] => Degree1
            [1] => Degree2
            [2] => 3
            [4] => 
        )

    [startDate] => Array
        (
            [0] => 2013-03-01
            [1] => 2013-03-03
            [2] => 1970-01-01
        )

    [endDate] => Array
        (
            [0] => 2013-03-02
            [1] => 2013-03-04
            [2] => 1970-01-01
        )

    [educationDescription] => Array
        (
            [0] => Description1
            [1] => Description2
            [2] => 
        )

)

そして、私はと呼ばれるIDの配列を持っていますmatches:

    [matches] => Array
        (
            [0] => 1
            [1] => 2

        )

メイン配列を 2 つに分割する必要があります。

$eduAdd = array()
$eduUpdate = array()

$eduAdd一致しないfieldIdが含まれ$eduUpdate、一致するfieldIdが含まれます。

$eduAdd次のようになります。

Array
    (
        [userId] => 35
        [fieldId] => Array
            (
                [2] => 3
                [4] => 4
            )

        [educationTitle] => Array
            (
                [2] => 3
                [4] => 
            )

        [educationDegree] => Array
            (

                [2] => 3
                [4] => 
            )

        [startDate] => Array
            (

                [2] => 1970-01-01
            )

        [endDate] => Array
            (

                [2] => 1970-01-01
            )

        [educationDescription] => Array
            (

                [2] => 
            )

    )

私はこれを試しましたin_arrayが、多次元配列では機能しないことがわかりました:

foreach($filteredSubmittedData as $filteredUpdates){
    if(in_array($filteredUpdates['fieldId'], $matches)){
        echo "yup";
    }
}

これどうやってするの?

4

2 に答える 2

1

$filteredUpdates['fieldId']それ自体は配列であり、 in_array には干し草の山が必要なため、期待どおりに機能しません。if 条件を次のように変更してみてください。

if(array_intersect($filteredUpdates['fieldId'], $matches)){
于 2013-03-29T08:04:50.047 に答える
1

解決

$mainあなたのメイン配列であり$matches、あなたのマッチ配列であることを考慮してください:

$eduAdd = array();
$eduUpdate = array();
$itodel = array();
foreach ($main['fieldId'] as $i => $v)
    if (isset($matches[$i]) and $matches[$i] == $v)
        $itodel[] = $i;

foreach ($main as $key => $arr) {
    if (!is_array($arr)) continue;
    foreach ($arr as $i => $v) {
        if (in_array($i, $itodel))
            $eduUpdate[$key][$i] = $v;
        else
            $eduAdd[$key][$i] = $v;
    }
}   

説明

まず、内部で一致するインデックスの配列を設定する必要があります$main['fieldId']。これらは、移動され$eduUpdate、挿入されないインデックス$eduAddです。

$itodel = array();
foreach ($main['fieldId'] as $i => $v)
    if (isset($matches[$i]) and $matches[$i] == $v)
        $itodel[] = $i;

次にforeach、実際に$main配列を他の 2 つに分割する別のループを実行します。主な条件はif (in_array($i, $itodel))、入れるべきものの中にあるインデックスを見ている場合は$eduUpdate、それに追加する必要があるためです。そうでない場合は、単に に挿入し$eduAddます。

于 2013-03-29T08:32:23.700 に答える