数组-循环,按键值分组,然后打印/回显新值(各种数组级别)


Array - Loop through, group together by key value, and then print/echo new values (various array levels)

我在循环中打印这个数组的结果(要在前端显示)时遇到了麻烦。目标是能够获得章节名称(例如,Chapter_Name_Unique),该章节名称的总章节帖子视图计数,然后在该章节名称(或组)内的每个chapter_成员的全名。我认为这里的结构不合理,因为我在循环中遇到了问题。

我的逻辑错了吗?

print_r看起来像这样:

Array
(
 [Chapter_Name_Unique] => Array
    (
        [chapter_post_views_count] => 3338
        [chapter_members] => Array
            (
                [0] => Array
                    (
                        [post_views_count] => 3338
                        [first_name] => Mary
                        [last_name] => Jane
                        [fullname] => maryjane
                        [chapter_name] => Chapter_Name_Unique
                    )
            )
    )
[Chapter_Name_Unique_2] => Array
    (
        [chapter_post_views_count] => 783
        [chapter_members] => Array
            (
                [0] => Array
                    (                    
                        [post_views_count] => 404
                        [first_name] => Betty
                        [last_name] => Lou
                        [fullname] => bettylou
                        [chapter_name] => Chapter_Name_Unique_2
                    )
                [1] => Array
                    (
                        [post_views_count] => 379
                        [first_name] => Judy
                        [last_name] => Jones
                        [fullname] => judyjones
                        [chapter_name] => Chapter_Name_Unique_2
                    )
            )
    )
)

和实际的函数是这样的:

$grouped_types = array();
// to add together post counts of group members
foreach($users as $chapter){ 
$grouped_types[$chapter['chapter_name']]['chapter_post_views_count'] += $chapter['post_views_count'];
}
// to group on top level by chapter_name
foreach($users as $chapter){ 
$grouped_types[$chapter['chapter_name']]['chapter_members'][] = $chapter;
}
echo "<pre>";
print_r( $grouped_types );
echo "</pre>";

尝试这样做(假设$users是您的print_r()的数组)

$grouped_types = array();
foreach($users as $chapter=>$data){ 
    $grouped_types[$chapter]['chapter_post_views_count'] = $data['chapter_post_views_count'];
    foreach($data['chapter_members'] as $member){ 
        $grouped_types[$chapter]['chapter_members'][] = $members['fullname'];
    }
}
echo "<pre>";
print_r( $grouped_types );
echo "</pre>";

谢谢大家,你们的建议真的很有帮助。我最终使用了两者中的一点,并将其组合在一起:

foreach( $grouped_types as $chapter_name_unique => $vars) { 
$chapter_post_views = $vars['chapter_post_views_count'];
$chapter_members = $vars['chapter_members']; 
echo $chapter_name_unique; // echo chapter name (level 1)
echo $chapter_post_views; // echo chapter post views (level 2 - $vars before)
foreach( $vars['chapter_members'] as $member){ // loop through all chapter_members
    $vars['chapter_members'][] = $member['fullname'];
    echo $member['fullname']; // echo all usernames within the group
    }
}

与上面的另外两个foreach语句结合使用(它们使用并将内容添加到$grouped_types数组中),这正是我所需要的。(希望不要有太多不必要的循环?)

再次感谢!