按属性值

时间:2017-08-01 20:13:39

标签: php

我有一个像这样的对象,我想从中创建多个对象。我需要检查'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'

2 个答案:

答案 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();