php多维数组用于键和获取值

时间:2016-12-30 03:12:05

标签: php arrays multidimensional-array

我有以下代码示例:

$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)

3 个答案:

答案 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)

只需迭代数组并检查子数组是否包含匹配的packidtotal项。在第一场比赛中打破循环:

$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];