里面的条件 array_reduce
Condition inside array_reduce
我想根据以下数组创建条件,但它没有给出我预期的结果,因为它没有 运行 第二个条件。
$arr = [
[
472 => [
'EL' => 52.9,
'MT' => 57.375,
'MO' => 56.6,
'SC' => 26,
'ET' => 50.775
]
], [
505 => [
'EL' => 53.425,
'MT' => 25,
'MO' => 62.8,
'SC' => 23,
'ET' => 25
]
]
];
$total = array_reduce(
$arr,
function($arr, $key) {
$id = key($key);
$consumed = $key[$id];
$sc = array_keys($consumed);
$arr[$id] = [
"totalc" => array_sum($consumed),
"condition" => array_search('SC', $sc) ? min($consumed) >= 23:26
];
return $arr;
},
[]
);
print_r($total) 输出如下:
Array
(
[472] => Array
(
[totalc] => 243.65
[condition] => 1
)
[505] => Array
(
[totalc] => 189.225
[condition] => 1
)
)
我的预期输出如下:
Array
(
[472] => Array
(
[totalc] => 243.65
[condition] => 1
)
[505] => Array
(
[totalc] => 189.225
[condition] =>
)
)
你可以清楚的看到我要查:当是'SC'的时候我希望最小条件是23。但是对于其他的,我希望最小值是26。所以我用了array_search() 当元素为'SC'时扫描数组。不幸的是,它只检查 'SC' 而不是其他人。请帮助我。
如果我理解正确,您希望 "SC" 键的允许值最小为 23,其余所有为 26。
注意行:array_search('SC', $sc) ? min($consumed) >= 23:26
首先检查 "SC" 是否存在并将 整个 数组的最小值设置为 23 或 26。
如果你想根据键有不同的最小值我会推荐这个:
function checkMin($arr, $min, $exception) {
foreach($arr as $k => $v) {
if ($v < (isset($exception[$k]) ? $exception[$k] : $min))
return false;
}
return true;
}
现在您可以使用以下方式调用:
"condition" => checkMin($consumed, 26, ["SC" => 23])
希望对您有所帮助!
我想根据以下数组创建条件,但它没有给出我预期的结果,因为它没有 运行 第二个条件。
$arr = [
[
472 => [
'EL' => 52.9,
'MT' => 57.375,
'MO' => 56.6,
'SC' => 26,
'ET' => 50.775
]
], [
505 => [
'EL' => 53.425,
'MT' => 25,
'MO' => 62.8,
'SC' => 23,
'ET' => 25
]
]
];
$total = array_reduce(
$arr,
function($arr, $key) {
$id = key($key);
$consumed = $key[$id];
$sc = array_keys($consumed);
$arr[$id] = [
"totalc" => array_sum($consumed),
"condition" => array_search('SC', $sc) ? min($consumed) >= 23:26
];
return $arr;
},
[]
);
print_r($total) 输出如下:
Array
(
[472] => Array
(
[totalc] => 243.65
[condition] => 1
)
[505] => Array
(
[totalc] => 189.225
[condition] => 1
)
)
我的预期输出如下:
Array
(
[472] => Array
(
[totalc] => 243.65
[condition] => 1
)
[505] => Array
(
[totalc] => 189.225
[condition] =>
)
)
你可以清楚的看到我要查:当是'SC'的时候我希望最小条件是23。但是对于其他的,我希望最小值是26。所以我用了array_search() 当元素为'SC'时扫描数组。不幸的是,它只检查 'SC' 而不是其他人。请帮助我。
如果我理解正确,您希望 "SC" 键的允许值最小为 23,其余所有为 26。
注意行:array_search('SC', $sc) ? min($consumed) >= 23:26
首先检查 "SC" 是否存在并将 整个 数组的最小值设置为 23 或 26。
如果你想根据键有不同的最小值我会推荐这个:
function checkMin($arr, $min, $exception) {
foreach($arr as $k => $v) {
if ($v < (isset($exception[$k]) ? $exception[$k] : $min))
return false;
}
return true;
}
现在您可以使用以下方式调用:
"condition" => checkMin($consumed, 26, ["SC" => 23])
希望对您有所帮助!