簡體   English   中英

循環遍歷包含對象的數組並從中創建不同的 arrays

[英]Loop through array contain objects and create different arrays from it

我有這個對象數組,我需要從中生成 arrays 以使每個數組都包含 [用戶名] 和他的 [長度] 的總和,長度是以秒為單位的時間。

最好的方法是什么?

Array
(
    [0] => stdClass Object
        (
            [length] => 4658
            [user_id] => 1922053
            [user_name] => Walled
        )

    [1] => stdClass Object
        (
            [length] => 5
            [user_id] => 1922053
            [user_name] => Walled
        )
    [2] => stdClass Object
        (
            [length] => 5555
            [user_id] => 19220
            [user_name] => Michael
        )

    [3] => stdClass Object
        (
            [length] => 2552
            [user_id] => 19220
            [user_name] => Michael
        )
)

這會將舊數組處理成新數組,它使用 user_id 作為新數組的鍵,因此它可以檢查它是否正在創建新的出現或只是將長度添加到新數組中的現有出現

$array = [
    (object)['length' => 4658, 'user_id' => 1922053, 'user_name' => 'Walled'],
    (object)['length' => 5, 'user_id' => 1922053, 'user_name' => 'Walled'],
    (object)['length' => 5555, 'user_id' => 19220, 'user_name' => 'Michael'],
    (object)['length' => 2552, 'user_id' => 19220, 'user_name' => 'Michael']
];

$new = [];
foreach( $array as $a ) {
    if ( ! array_key_exists($a->user_id, $new) ) {
        $new[$a->user_id] = $a;    
    } else {
        echo $new[$a->user_id]->length . PHP_EOL;
        $new[$a->user_id]->length += $a->length;    
    }
    
}

print_r($new);

結果

Array
(
    [1922053] => stdClass Object
        (
            [length] => 4663
            [user_id] => 1922053
            [user_name] => Walled
        )
    [19220] => stdClass Object
        (
            [length] => 8107
            [user_id] => 19220
            [user_name] => Michael
        )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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