将PHP对象拆分为按属性值分组的多个对象

将PHP对象拆分为按属性值分组的多个对象,php,Php,我有一个这样的对象,我想从中创建多个对象。我需要检查“group”的所有值,并为每个不同的组创建一个新对象 array (size=6) 0 => array (size=2) 'name' => string 'Cindy' 'group' => string 'GROUP A' 1 => array (size=2) 'name' => string 'Carl' 'group' =&g

我有一个这样的对象,我想从中创建多个对象。我需要检查“group”的所有值,并为每个不同的组创建一个新对象

array (size=6)
  0 => 
    array (size=2)
      'name' => string 'Cindy'
      'group' => string 'GROUP A'
  1 => 
    array (size=2)
      'name' => string 'Carl'
      'group' => string 'GROUP A'
  2 => 
    array (size=2)
      'name' => string 'Anna'
      'group' => string 'GROUP A'
  3 => 
    array (size=2)
      'name' => string 'Mary'
      'group' => string 'GROUP B'
  4 => 
    array (size=2)
      'name' => string 'John'
      'group' => string 'GROUP B'
  5 => 
    array (size=2)
      'name' => string 'Frank'
      'group' => string 'GROUP C'
对于上一个示例,我应该得到3个不同的对象,就像这样,每个对象都有一个不同的变量

array (size=3)
  0 => 
    array (size=2)
      'name' => string 'Cindy'
      'group' => string 'GROUP A'
  1 => 
    array (size=2)
      'name' => string 'Carl'
      'group' => string 'GROUP A'
  2 => 
    array (size=2)
      'name' => string 'Anna'
      'group' => string 'GROUP A'

array (size=2)
  0 => 
    array (size=2)
      'name' => string 'Mary'
      'group' => string 'GROUP B'
  1 => 
    array (size=2)
      'name' => string 'John'
      'group' => string 'GROUP B'

array (size=1)
  0 => 
    array (size=2)
      'name' => string 'Frank'
      'group' => string 'GROUP C'

也许你可以这样做——我不确定你是否知道你有多少组,但你可以数一数,然后在chr()上创建一个循环

$tests=[
[
“name”=>“Cindy”,
“组”=>“A组”
],
[
“name”=>“Carl”,
“组”=>“A组”
],
[
'姓名'=>'安娜',
“组”=>“A组”
],
[
“name”=>“Mary”,
“组”=>“B组”
],
[
“name”=>“John”,
“组”=>“B组”
],
[
“name”=>“Frank”,
“组”=>“C组”
]
];
回声';var_dump($测试);回声';
$variables=[];
foreach($tests作为$test){
$key=str_replace('','',strtolower($test['group']);
$variables[$key][]=$test;
}
提取($变量);
//回声';变量转储(数组键($variables));回声';
回声';var_dump($a组,$b组,$c组);回声';模具();

在您想要的结果中,一个变量将包含元素,其中每个元素都具有相同的组值:这似乎是浪费:只需将该变量命名为组,并仅列出其中的名称即可。与其他变量不同的是,选择一个关联(!)数组,该数组将组名作为键,相应的名称作为值(数组):

我相信这比你想象的更有用、更容易管理

下面是生成它的方法(假设输入变量为
$arr
):


$result
将如上所述。

您实际上指的是对象还是数组?@UlrikMcArdle好吧,第一个示例是一个对象,我想将其拆分为数组或具有类似输出的对象。一个大数组中包含3个不同的数组,或者每个数组包含一个变量(如您希望的示例所示)?@Mikey对于该示例,可能有3个不同的变量第一个示例是数组,而不是对象。
    $tests =  [
        [
            'name' => 'Cindy',
            'group' => 'GROUP A'
        ],
        [
            'name' => 'Carl',
            'group' => 'GROUP A'
        ],
        [
            'name' => 'Anna',
            'group' => 'GROUP A'
        ],
        [
            'name' => 'Mary',
            'group' => 'GROUP B'
        ],
        [
            'name' => 'John',
            'group' => 'GROUP B'
        ],
        [
            'name' => 'Frank',
            'group' => 'GROUP C'
        ]
    ];

    echo '<pre>'; var_dump($tests); echo '</pre>';

    $variables = [];
    foreach($tests as $test){
        $key = str_replace(' ', '_', strtolower($test['group']));
        $variables[$key][] = $test;
    }

    extract($variables);

    // echo '<pre>'; var_dump(array_keys($variables)); echo '</pre>';
    echo '<pre>'; var_dump($group_a, $group_b, $group_c); echo '</pre>'; die();
[
    ["GROUP A"] => ["Cindy", "Carl", "Anna"],
    ["GROUP B"] => ["Mary", "John"],
    ["GROUP C"] => ["Frank"]
]
foreach ($arr as $pair) {
    $result[$pair["group"]][] = $pair["name"];
}