![](/img/trans.png)
[英]How to get a value in a multidimensional array using a string as multidimensional index?
[英]how to get a slice of a multidimensional array using an array with index keys
我有一個數組
$arr = [
[
'id' => 10,
'name' => 'John',
'occupation' => 'engineer',
'points' => 10
],
[
'id' => 10,
'name' => 'John',
'occupation' => 'librarian',
'points' => 14
],
[
'id' => 7,
'name' => 'Sarah',
'occupation' => 'artist',
'points' => 21
],
[
'id' => 7,
'name' => 'Sarah',
'occupation' => 'teacher',
'points' => 17
],
[
'id' => 10,
'name' => 'John',
'occupation' => 'butcher',
'points' => 7
],
[
'id' => 7,
'name' => 'Sarah',
'occupation' => 'engineer',
'points' => 9
],
[
'id' => 25,
'name' => 'Andreea',
'occupation' => 'judge',
'points' => 11
]
];
我使用此內置函數來獲取唯一的ID:
$people = array_column($arr, 'id', 'id');
然后,我使用一個foreach來獲取主數組$arr
中每個用戶的每次出現:
foreach($people as $id){
$keys = array_keys(array_column($arr, 'id'), $id);
}
這是回報:
Array
(
[0] => 0
[1] => 1
[2] => 4
)
Array
(
[0] => 2
[1] => 3
[2] => 5
)
Array
(
[0] => 6
)
現在,為了為每個人構建一個小數組,我可以遍歷這個包含主數組鍵的小數組,並獲取值並以小片段結尾。
但是,如何獲得每個人的實際$arr
值,而不僅僅是獲得鍵? (使用盡可能少的資源)
我需要的結果是這樣的:
Array
(
[10] => Array
(
[0] => Array
(
[id] => 10
[name] => John
[occupation] => engineer
[points] => 10
)
[1] => Array
(
[id] => 10
[name] => John
[occupation] => librarian
[points] => 14
)
[2] => Array
(
[id] => 10
[name] => John
[occupation] => butcher
[points] => 7
)
)
[7] => Array
(
[0] => Array
(
[id] => 7
[name] => Sarah
[occupation] => artist
[points] => 21
)
[1] => Array
(
[id] => 7
[name] => Sarah
[occupation] => teacher
[points] => 17
)
[2] => Array
(
[id] => 7
[name] => Sarah
[occupation] => engineer
[points] => 9
)
)
[25] => Array
(
[0] => Array
(
[id] => 25
[name] => Andreea
[occupation] => judge
[points] => 11
)
)
)
PS:我不需要保持鍵索引相同。
使用group by的功能, 例如 :
$byGroup = group_by("id", $arr);
function group_by($key, $data) {
$result = array();
foreach($array as $val) {
if(array_key_exists($key, $val)){
$result[$val[$key]][] = $val;
}else{
$result[""][] = $val;
}
}
return $result;
}
演示 ,您可以以更有效的方式進行操作
$result = [];
foreach($arr as $v){
$result[$v["id"]][] = $v;
}
print_r($result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.