私は少し問題に直面しています。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は変更されません...
必要に応じて、コードのカラー画像もアップロードしました。
私が欠けているものについてのアイデアはありますか?
ところで:私の悪い英語でごめんなさい、それは私の母国語ではありません。
コードでは、最後から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]
コメントを追加