【发布时间】:2017-08-14 20:12:28
【问题描述】:
我有两个数组。我已将两个数组合并以输出总数
第一个数组 =
$farray = Array (
[0] => Array (
[1] => Array (
[ED] => 15
[EN] => 14
)
)
[1] => Array (
[2] => Array (
[ED] => 5
[EN] => 10
)
)
)
第二个数组 =
$tarray = Array (
[0] => Array (
[1] => Array (
[ED] => 45
[EN] => 50
)
)
[1] => Array (
[2] => Array (
[ED] => 38
[EN] => 40
)
)
)
以上两个数组的组合:
$all = Array (
[0] => Array (
[1] => Array (
[ED] => 60
[EN] => 64
)
)
[1] => Array (
[2] => Array (
[ED] => 43
[EN] => 50
)
)
)
现在我想使用第一个数组和第二个数组将条件插入以下代码:
$fscore = array_reduce(
$farray,
function($farray, $item) {
$id = key($item);
$scores = $item[$id];
$farray[$id] = array(
"score" => array_sum($scores),
"farray"=> min($scores)>=7
);
return $farray;
},
array()
);
上述尝试有效并输出以下内容 (print_r($fscore)):
Array (
[1] => Array (
[score] => 124
[farray] => 1
)
[2] => Array (
[score] => 93
[farray] => 0
)
)
但我想为其设置更多条件并与$tarray 结合,如下所示:
$all= array_reduce(
$all,
function($all, $item) {
$id = key($item);
$scores = $item[$id];
$all[$id] = array(
"score" => array_sum($scores),
"farray"=> min($scores)>=7
//if tarray key==ED 23 else 26 for minimum `$scores`
"tarray"=> min($scores)>='ED'? 23:26//ternary operator
);
return $all;
},
array()
);
我不知道如何插入 $tarray。如前所述,没有 $tarray,它可以工作。
我的尝试失败并且没有输出预期的结果。在这个问题中,我只使用了 ED 和 EN(分数键)来节省更多空间。 $farray 的预期最小分数大于或等于 7,而 $tarray 的预期最小分数是 23/26。如果分数键是 $tarray 中的 ED,则最小分数大于或等于 23,否则必须为 26。根据这些条件,我想返回 true 或 false 值。请帮忙。以下是我的尝试:
$farray = array(
array (
1=> array(
"ED"=>15,
"EN"=>14
)
),
array(
2=>array(
"ED"=>5,
"EN"=>10
)
)
);
$tarray = array (
array (
1 => array (
"ED" => 45,
"EN" => 50
)
),
array (
2 => array (
"ED" => 38,
"EN" => 40
)
)
);
$combine = array (
array (
1 => array (
"ED" => 60,
"EN" => 64
)
),
array (
2 => array (
"ED" => 43 ,
"EN" => 50
)
)
);
function filtertArray($value){
foreach($value as $key =>$val){
foreach($val as $k=>$v){
foreach($v as $t=>$m){
if($t=='ED'){
return $m>=23;
}else{
return $m>=26;
}
}
}
}
}
function filterfArray($value){
foreach($value as $key =>$val){
foreach($val as $k=>$v){
foreach($v as $t=>$m){
return $m>=7;
}
}
}
}
$all = array_reduce(
$combine,
function($combine, $item) use ($farray, $tarray) {
$id = key($item);
$scores = $item[$id];
$combine[$id] = array(
"score" => array_sum($scores),
"farray"=> array_filter($farray,"filterfArray"),
"tarray"=> array_filter($tarray,"filtertArray")
);
return $combine;
},
array()
);
echo "<pre>";
print_r($all);
echo "</pre>";
这个输出:
E_WARNING : type 2 -- Invalid argument supplied for foreach()
此代码的预期输出是:
Array (
[1] => Array (
[score] => 124
[farray] => true//1
[tarray] => true//1
)
[2] => Array (
[score] => 93
[farray] => false//0
[tarray] => true//1
)
)
【问题讨论】:
-
为什么
"tarray"=> min($scores)>='ED'? 23:26应该生成['tarray']=>1?您的预期输出与您的方法的意图不同。这使您的问题不清楚。 -
@mickmackusa,这将生成真或假值。
-
不正确,条件会输出
23或26。 Demo如果你能澄清你的问题细节,我想帮助你。 -
@mickmackusa,非常感谢。我在问题中添加了更多细节。请看一看。
-
是的,我正在尝试,但从第一个 $farray 子数组和 $tarray 子数组开始。
标签: php arrays conditional