2013-11-25 92 views
-1

我有對象的數組,每個對象保持兩個參數,如下所示:骨料陣列基本

Array 
(
    [0] => stdClass Object 
    (
     [title] => 'games' 
     [transaction_id] => 102 
    ) 
    [1] => stdClass Object 
    (
     [title] => 'media' 
     [transaction_id] => 95 
    ) 
    [2] => stdClass Object 
    (
     [title] => 'tv' 
     [transaction_id] => 102 
    ) 
    [3] => stdClass Object 
    (
     [title] => 'jane' 
     [transaction_id] => 42 
    ) 
    [4] => stdClass Object 
    (
     [title] => 'ads' 
     [transaction_id] => 95 
    ) 
) 

的「的transaction_id」鍵具有在其他對象somtimes相同的值(102,95)陣列。

我想orginizie陣列,使具有相同TRANSACTION_ID值中的每個對象將是下一個新的數組原始數組(多維)中,像這樣:

Array 
(
[0] => Array 
(
    [0] => games 
    [1] => tv 
) 
[1] => Array 
    (
[0] => jane 
) 
[2] => Array 
(
[0] => ads 
[1] => media 
) 
) 

回答

2

您可以使用此。它將數組鍵設置爲值transaction_id

$result = []; 

foreach($data as $d){ 
$result[$d->transaction_id][] = $d->title; 
} 

print_r($result);回報,

Array 
(
    [102] => Array 
     (
      [0] => 'games' 
      [1] => 'tv' 
     ) 

    [95] => Array 
     (
      [0] => 'media' 
      [1] => 'ads' 
     ) 

    [42] => Array 
     (
      [0] => 'jane' 
     ) 

) 

添加$result = array_values($result);如果你想數組鍵重置爲(0,1,2)

2

你可以嘗試這樣的事情:

$result = array(); 
foreach ($data as $obj) { 
    if (empty($result[$obj->transaction_id])) { 
     $result[$obj->transaction_id] = array($obj->title); 
    } else { 
     $result[$obj->transaction_id][] = $obj->title; 
    } 
} 

$result = array_values($result); 
1

你可以使用transaction_id作爲新陣列中的關鍵字

$new_array = array(); 
foreach ($oryginal_array as $row){ 
    if (!isset($new_array[$row['transaction_id']])) 
    $new_array[$row['transaction_id']] = array(); 

    $new_array[$row['transaction_id']][] = $row['title']; 
} 
1

稍微不同的方法是通過自定義函數:

function aggragateByProperty($inputData, $propertyName) { 
    $byProperty = array(); 

    foreach ($inputData as $object) 
    { 
     $objProperties = get_object_vars($object); 

     foreach ($objProperties as $key => $value) 
     { 
      if ($key != $propertyName) 
      { 
       continue; 
      } 

      $byProperty[$value][] = $object; 
     }   
    } 

    return $byProperty; 
} 

然後就可以調用它的任何屬性:

$outputData = aggragateByProperty($inputData, 'transaction_id'); 

輸出示例:

 
array(3) { 
    [102]=> 
    array(2) { 
     [0]=> 
     object(stdClass)#1 (2) { 
      ["title"]=> 
      string(5) "games" 
      ["transaction_id"]=> 
      int(102) 
     } 
     [1]=> 
     object(stdClass)#3 (2) { 
      ["title"]=> 
      string(2) "tv" 
      ["transaction_id"]=> 
      int(102) 
     } 
    } 
    [95]=> 
    array(2) { 
     [0]=> 
     object(stdClass)#2 (2) { 
      ["title"]=> 
      string(5) "media" 
      ["transaction_id"]=> 
      int(95) 
     } 
     [1]=> 
     object(stdClass)#5 (2) { 
      ["title"]=> 
      string(3) "ads" 
      ["transaction_id"]=> 
      int(95) 
     } 
    } 
    [42]=> 
    array(1) { 
     [0]=> 
     object(stdClass)#4 (2) { 
      ["title"]=> 
      string(4) "jane" 
      ["transaction_id"]=> 
      int(42) 
     } 
    } 
}