我有一个对象数组,每个对象都有两个参数,如下所示:
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"键在数组中的其他对象中有时具有相同的值(102,95)。
我想组织数组,使每个具有相同transaction_id值的对象都位于原始数组(多维)中的一个新数组下,如下所示:
Array
(
[0] => Array
(
[0] => games
[1] => tv
)
[1] => Array
(
[0] => jane
)
[2] => Array
(
[0] => ads
[1] => media
)
)
您可以使用它。它将数组关键字设置为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'
)
)
如果要将数组键重置为(0,1,2)
等,请添加$result = array_values($result);
。
您可以尝试以下操作:
$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);
您可以使用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'];
}
一种稍微不同的方法是通过自定义函数:
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');
样本输出:
阵列(3){[102]=>阵列(2){[0]=>对象(stdClass)#1(2){["title"]=>string(5)"游戏"["transaction_id"]=>int(102)}[1] =>对象(stdClass)#3(2){["title"]=>string(2)"电视"["transaction_id"]=>int(102)}}[95]=>阵列(2){[0]=>对象(stdClass)#2(2){["title"]=>string(5)"媒体"["transaction_id"]=>int(95)}[1] =>对象(stdClass)#5(2){["title"]=>string(3)"广告"["transaction_id"]=>int(95)}}[42]=>阵列(1){[0]=>对象(stdClass)#4(2){["title"]=>string(4)"jane"["transaction_id"]=>int(42)}}}