2013-11-25 1 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

You может использовать 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) 
     } 
    } 
} 
Смежные вопросы