別の配列の値と等しい場合、特定の配列の値を変更する

ナタン・フーリエ

私は少し問題に直面しています。2つの単純な配列があります。最初の配列には、スーパーバイザー設定とその値が含まれています。2番目の配列には、すべての設定とそのデフォルト値が含まれています。

利用可能なすべてのプリファレンスを表示する配列を作成し、スーパーバイザープリファレンスが存在する場合はその値の値を変更します。それ以外の場合はデフォルト値を維持します。


これが私の2つのデフォルト配列です:

$aSupervisorDefaultPreferences = Array(
    '1' => 1,
    '2' => 1,
    '3' => 1
)

$aSupervisorXPreferences = Array(
    '1' => 0,
    '2' => 1
)

これは私が新しい配列をどのように見せたいかです:

$aSupervisorDefaultPreferencesDetails: 
Array
(
    [0] => Array
        (
            [preference_id] => 1
            [preference_title] => Administration panel open by default.
            [default_preference_value] => 0
        )

    [1] => Array
        (
            [preference_id] => 2
            [preference_title] => Administration panel grey by default.
            [default_preference_value] => 1
        )

    [2] => Array
        (
            [preference_id] => 3
            [preference_title] => Open "target_blank" in new tab.
            [default_preference_value] => 1
        )

)

そしてこれは私の実際のコードです(私が知っている中で最もクリーンではありません^^):

foreach ($aSupervisorDefaultPreferences as $iSupervisorDefaultPreferenceID => $iSupervisorDefaultPreferenceValue) {
    $oPreference = new UserSupervisorPreferences($iSupervisorDefaultPreferenceID);
    $sSupervisorDefaultPreferenceTitle = $oPreference->getTitle();

    $aSupervisorDefaultPreferenceDetails = array(
        'preference_id' => $iSupervisorDefaultPreferenceID,
        'preference_title' => $sSupervisorDefaultPreferenceTitle,
        'default_preference_value' => ""
    );
    $aSupervisorDefaultPreferencesDetails[] = $aSupervisorDefaultPreferenceDetails;
}

foreach ($aSupervisorXPreferences as $iSupervisorPreferenceID => $iSupervisorPreferenceValue) {
    $iPreferenceID = $iSupervisorPreferenceID;
}

foreach ($aSupervisorDefaultPreferencesDetails as $iKey => $aSupervisorDefaultPreference) {
    $iDefaultPreferenceID = $aSupervisorDefaultPreferencesDetails[$iKey]['preference_id'];
    if ($iDefaultPreferenceID == $iPreferenceID) {
        $aSupervisorDefaultPreferencesDetails[$iKey]['default_preference_value'] = $iSupervisorPreferenceValue;
    }
    else {
        $aSupervisorDefaultPreferencesDetails[$iKey]['default_preference_value'] = $iSupervisorDefaultPreferenceValue;
    }
}

echo '$aSupervisorDefaultPreferencesDetails: <br />';
echo '<pre>';
print_r($aSupervisorDefaultPreferencesDetails);
echo '</pre>';
echo '<hr>';

しかし今のところ、私の新しい配列は次のようになります。

$aSupervisorDefaultPreferencesDetails: 
Array
(
    [0] => Array
        (
            [preference_id] => 1
            [preference_title] => Administration panel open by default.
            [default_preference_value] => 1
        )

    [1] => Array
        (
            [preference_id] => 2
            [preference_title] => Administration panel grey by default.
            [default_preference_value] => 1
        )

    [2] => Array
        (
            [preference_id] => 3
            [preference_title] => Open "target_blank" in new tab.
            [default_preference_value] => 1
        )

)

ご覧のとおり、default_preference_valueは変更されません...

必要に応じて、コードのカラー画像もアップロードしました

私が欠けているものについてのアイデアはありますか?

ところで:私の悪い英語でごめんなさい、それは私の母国語ではありません。

スタンジ1791

コードでは、最後から2番目のforeachループが実行された後、$ iPreferenceIDは常に最後のID( '2')に設定され、$ iSupervisorPreferenceValueは常に$ aSupervisorXPreferences配列の最後の値(1)に設定されます。同じことが最初のループの$ iSupervisorDefaultPreferenceValueにも当てはまります。

したがって、最後のforeachループでは、現在のIDに一致する値ではなく、常に前のループの「最後の」値を使用しています。これを修正するには、foreachループをネストする必要があります。

しかし、私は代わりにこのようなものを選びます:

foreach ($aSupervisorDefaultPreferences as $iSupervisorDefaultPreferenceID => $iSupervisorDefaultPreferenceValue) {
    $oPreference = new UserSupervisorPreferences($iSupervisorDefaultPreferenceID);
    $sSupervisorDefaultPreferenceTitle = $oPreference->getTitle();
    // If a custom value is set for the current id in the $aSupervisorXPreferences array use that, otherwise use the default value from the $aSupervisorDefaultPreferences array 
    $value = isset($aSupervisorXPreferences[$iSupervisorDefaultPreferenceID]) ? $aSupervisorXPreferences[$iSupervisorDefaultPreferenceID] : $aSupervisorDefaultPreferences[$iSupervisorDefaultPreferenceID]; 

    $aSupervisorDefaultPreferenceDetails = array(
        'preference_id' => $iSupervisorDefaultPreferenceID,
        'preference_title' => $sSupervisorDefaultPreferenceTitle,
        'default_preference_value' => $value
    );
    $aSupervisorDefaultPreferencesDetails[] = $aSupervisorDefaultPreferenceDetails;
}

echo '$aSupervisorDefaultPreferencesDetails: <br />';
echo '<pre>';
print_r($aSupervisorDefaultPreferencesDetails);
echo '</pre>';
echo '<hr>';

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PHPが別の配列から特定の文字列を持っている場合、配列値を取得します

分類Dev

1つの列の値が値の配列を持つ列と一致する場合は、新しい列を変更します

分類Dev

PHPこの場合、配列要素の値を変更します

分類Dev

別の列の値が特定の文字列で終わる場合は、列の値を変更します

分類Dev

配列内の特定のゼロ以外の値をJavascriptの別の配列の値で変更する方法

分類Dev

別の配列の値を変更すると、配列の値が変更されますか?

分類Dev

別の配列の情報に基づいて配列の値をtrueとfalseに変更する方法

分類Dev

配列の値を別の配列の値と照合し、対応する値を新しい配列にループとして返します

分類Dev

別の列に基づいて列の値を変更する(特定の行の場合)

分類Dev

配列値をある配列から別の配列に変更する

分類Dev

ある配列の値が別の配列に存在する場合は配列を返します

分類Dev

多次元配列の値を新しい配列に変更する

分類Dev

javascriptforEachの結果を別の配列の値で変更する

分類Dev

複数の値の配列をチェックし、値が存在する場合は出力を変更する

分類Dev

配列値の1つが何かと等しい場合は、それを変更します

分類Dev

javascript:配列内の値が別の配列にある場合、その値を1回だけ削除します

分類Dev

別の配列に基づいて列の値を変更します

分類Dev

別の配列の値を介して配列要素の直接値を変更する

分類Dev

配列値を特定の値/間隔に変更しますか?

分類Dev

値が配列の任意の値と等しい場合、MySQLUpdate列

分類Dev

値が一致する場合、dictの1つの配列から別の配列に特定の値をマージします

分類Dev

Numpy配列の2つの特定の値の間の値を変更する

分類Dev

値が複数の配列に存在するかどうかを確認し、存在する場合は1つの配列の値を変更します

分類Dev

配列値を別の特定の配列に移動します

分類Dev

配列の値を変更する

分類Dev

Python配列の値を変更する

分類Dev

配列内の値を変更する

分類Dev

javascriptの別の配列に基づいてオブジェクトの配列の値を変更する

分類Dev

PHP配列内の特定の値を変更する

Related 関連記事

  1. 1

    PHPが別の配列から特定の文字列を持っている場合、配列値を取得します

  2. 2

    1つの列の値が値の配列を持つ列と一致する場合は、新しい列を変更します

  3. 3

    PHPこの場合、配列要素の値を変更します

  4. 4

    別の列の値が特定の文字列で終わる場合は、列の値を変更します

  5. 5

    配列内の特定のゼロ以外の値をJavascriptの別の配列の値で変更する方法

  6. 6

    別の配列の値を変更すると、配列の値が変更されますか?

  7. 7

    別の配列の情報に基づいて配列の値をtrueとfalseに変更する方法

  8. 8

    配列の値を別の配列の値と照合し、対応する値を新しい配列にループとして返します

  9. 9

    別の列に基づいて列の値を変更する(特定の行の場合)

  10. 10

    配列値をある配列から別の配列に変更する

  11. 11

    ある配列の値が別の配列に存在する場合は配列を返します

  12. 12

    多次元配列の値を新しい配列に変更する

  13. 13

    javascriptforEachの結果を別の配列の値で変更する

  14. 14

    複数の値の配列をチェックし、値が存在する場合は出力を変更する

  15. 15

    配列値の1つが何かと等しい場合は、それを変更します

  16. 16

    javascript:配列内の値が別の配列にある場合、その値を1回だけ削除します

  17. 17

    別の配列に基づいて列の値を変更します

  18. 18

    別の配列の値を介して配列要素の直接値を変更する

  19. 19

    配列値を特定の値/間隔に変更しますか?

  20. 20

    値が配列の任意の値と等しい場合、MySQLUpdate列

  21. 21

    値が一致する場合、dictの1つの配列から別の配列に特定の値をマージします

  22. 22

    Numpy配列の2つの特定の値の間の値を変更する

  23. 23

    値が複数の配列に存在するかどうかを確認し、存在する場合は1つの配列の値を変更します

  24. 24

    配列値を別の特定の配列に移動します

  25. 25

    配列の値を変更する

  26. 26

    Python配列の値を変更する

  27. 27

    配列内の値を変更する

  28. 28

    javascriptの別の配列に基づいてオブジェクトの配列の値を変更する

  29. 29

    PHP配列内の特定の値を変更する

ホットタグ

アーカイブ