如果某个数组中的值等于另一个数组中的值,则更改该数组中的值
chaging value in a certain array if it equal value in another array
我遇到了一个小问题。
我有两个简单的数组,第一个包含主管偏好及其值。第二个数组包含所有首选项及其默认值。
我想创建一个数组来显示所有可用的首选项,如果存在,则将它们的值更改为主管首选项中的值,否则保留默认值。
这是我的两个默认数组:
$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保持不变...
如果您愿意,我还上传了 colored image 我的代码。
知道我错过了什么吗?
顺便说一句:抱歉我的英语不好,这不是我的母语。
在您的代码中,在倒数第二个 foreach 循环具有 运行 之后,$iPreferenceID 始终设置为最后一个 ID('2')并且 $iSupervisorPreferenceValue 始终设置为最后一个值( 1) 在 $aSupervisorXPreferences 数组中。第一个循环中的 $iSupervisorDefaultPreferenceValue 也是如此。
因此,在最后一个 foreach 循环中,您始终使用前一个循环中的 "last" 值,而不是与当前 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>';
我遇到了一个小问题。 我有两个简单的数组,第一个包含主管偏好及其值。第二个数组包含所有首选项及其默认值。
我想创建一个数组来显示所有可用的首选项,如果存在,则将它们的值更改为主管首选项中的值,否则保留默认值。
这是我的两个默认数组:
$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保持不变...
如果您愿意,我还上传了 colored image 我的代码。
知道我错过了什么吗?
顺便说一句:抱歉我的英语不好,这不是我的母语。
在您的代码中,在倒数第二个 foreach 循环具有 运行 之后,$iPreferenceID 始终设置为最后一个 ID('2')并且 $iSupervisorPreferenceValue 始终设置为最后一个值( 1) 在 $aSupervisorXPreferences 数组中。第一个循环中的 $iSupervisorDefaultPreferenceValue 也是如此。
因此,在最后一个 foreach 循环中,您始终使用前一个循环中的 "last" 值,而不是与当前 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>';