我有一个像这样的对象,我想从中创建多个对象。我需要检查'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'
答案 0 :(得分:3)
在您想要的结果中,一个变量将具有元素,其中每个变量具有相同的组值:这似乎是浪费:只需将该变量命名为组,并仅列出名称它。而不是使用不同的变量,请选择一个关联(!)数组,该数组将组名称作为键,相应的名称作为值(数组):
[
["GROUP A"] => ["Cindy", "Carl", "Anna"],
["GROUP B"] => ["Mary", "John"],
["GROUP C"] => ["Frank"]
]
我认为这比你想的更有用,也更容易管理。
以下是如何生成它(假设您的输入变量为$arr
):
foreach ($arr as $pair) {
$result[$pair["group"]][] = $pair["name"];
}
$result
将如上所述。
答案 1 :(得分:1)
也许你可以做这样的事情 - 我不确定你是否知道你有多少组,但是你可以计算它们并在chr上创建一个循环()
$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();