2016-12-30 110 views
1

我有下面的代碼示例:PHP多維數組的關鍵,並得到價值

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

}

我怎樣才能搜索等於$memPack->packId的密鑰packId並獲得匹配總數? (例如,如果packId =2並獲得值20)

+0

你的意思是除了循環? – Rasclatt

+0

更新了問題,$ arr在循環 –

回答

1

爲了獲得更好的性能,這裏有一個很好的實現。

$array = array_combine(array_column($arr, 'packId'), array_column($arr, 'total')); 
$total = $array[$memPack->packId]; 
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

只需迭代數組並檢查子數組是否包含匹配的項目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

我已經添加了這個例子的完整性。不要使用它,因爲它是不理想的。

+0

THX,但我想知道爲什麼第二種方法不太理想?可以看到一些統計數字嗎? –

+1

@DoranWu,'array_column'從'$ arr'('O(n)')中的所有項目構建一個數組。然後'array_search',在最壞的情況下,迭代生成的數組中的所有項('O(n)')。因此,最壞的情況是「O(2n)」操作。第一種方法('foreach')在最壞的情況下在第一個匹配「O(n)」時打破循環。此外,使用'array_search'和'array_column'的代碼可讀性較差,甚至不太靈活 –