簡體   English   中英

如何使用帶有索引鍵的數組獲取多維數組的切片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM