我有以下代码示例:
$arr = array(
array(
'packid'=> '1', 'total' => '30'),
array(
'packid'=> '2', 'total' => '20')
);
$ arr处于循环中
foreach ($pack->memberPack as $memPack) {
if($memPack->packId = $search_arr_key)
//get the `total` value then do something
}
像这样的和$ memPack对象:
array(1) {
["memberPack"]=>
array(1) {
[0]=>
object(MemberPack)#290 (6) {
["errors"]=>
NULL
["attributes":"ActiveRecord\Model":private]=>
array(3) {
["memberPackId"]=>
int(1)
["packId"]=>
int(1)
["memberId"]=>
int(14369)
}
}
}
}
如何搜索等于packId
的密钥$memPack->packId
并获得匹配总数? (例如,如果packId =2
并获得值20)
答案 0 :(得分:1)
我认为您正在寻找一个根据您选择的packid查找结果的循环。
<?php
$arr = array(
array(
'packid'=> '1', 'total' => '30'),
array(
'packid'=> '2', 'total' => '20')
);
$whateverPackidYouWant = 2;
$answer;
for ($i = 0; $i < count($arr); $i++) {
if ($arr[$i]['packid'] == $whateverPackidYouWant) {
$answer = $arr[$i]['total'];
}
}
echo $answer;
?>
如果您正在寻找,请告诉我。
答案 1 :(得分:1)
只需迭代数组并检查子数组是否包含匹配的packid
和total
项。在第一场比赛中打破循环:
$packid = 2;
foreach ($arr as $k => $v) {
if ($v['packid'] == $packid && isset($v['total'])) {
$total = $v['total'];
break;
}
}
另一种方法(不太理想,但对某些人来说可能看起来很优雅):
$key = array_search($packid, array_column($arr, 'packid'));
if ($key !== false && isset($arr[$key]['total'])) {
$total = $arr[$key]['total'];
}
其中array_column
按照与packid
中子数组的顺序匹配的顺序从[1, 2]
值($arr
)构建数组; array_search
返回$packid
值数组中第一次出现packid
的索引(因此,$arr
中子数组的键)。其余代码提取total
。
我已添加此示例以确保完整性。不要使用它,因为它不是最理想的。
答案 2 :(得分:1)
为了获得更好的性能,这是一个很好的实现。
$array = array_combine(array_column($arr, 'packId'), array_column($arr, 'total'));
$total = $array[$memPack->packId];