2017-08-01 57 views
-1

我有一個像這樣的對象,我想從中創建多個對象。我需要檢查'group'的所有值,併爲每個不同的組創建一個新對象。在按屬性值分組的多個對象中拆分PHP對象

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

你確實是指對象或數組? –

+0

@UlrikMcArdle那麼,第一個例子是一個對象,我想用解釋的類似輸出將它拆分成數組或對象。 – raptorandy

+0

3個不同的數組包含在一個大數組中或每個數組的一個變量(如您所期望的示例所示)? – Mikey

回答

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

也許你可以做這樣的事情 - 我不知道,如果你知道你有多少組,但你也不能指望他們在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();