我想从以下数组中得出条件,但由于它没有运行第二个条件,因此无法给出预期的结果。
public static void ReadFile()
{
List<string> lines = new List<string>();
using (var sr = new System.IO.StreamReader(@"C:\test\tempfile.txt"))
{
string line = null;
while((line = sr.ReadLine()) != null)
{
lines.Insert(0, line);
}
lines.RemoveRange(0, 20);
}
List<string> result = lines.Where((x, i) => i % 2 == 0).ToList();
//Results:
// Fourth-Read:2019/09/24, 12345, abcdefg
// Third-Read:2019/09/24, 12345, abcdefg
// Second-Read:2019/09/24, 12345, abcdefg
// First-Read:2019/09/24, 12345, abcdefg
}
print_r($ total)输出以下内容:
$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;
},
[]
);
我的预期输出如下:
Array
(
[472] => Array
(
[totalc] => 243.65
[condition] => 1
)
[505] => Array
(
[totalc] => 189.225
[condition] => 1
)
)
您可以清楚地看到我要检查:当它是'SC'时,我希望最小值为23。对于其他人,我希望最小值为26。所以我使用array_search()来扫描元素为“ SC”时的数组。不幸的是,它仅检查“ SC”,而不检查其他内容。请帮助我。
答案 0 :(得分:1)
如果我理解正确,那么您希望“ 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])
希望有帮助!