我有一个对象数组,每个对象都有两个参数,如下所示:
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)。
我想对数组进行orginizie,以便具有相同transaction_id值的每个对象都位于原始数组(Multidimensional)中的新数组下,如下所示:
Array
(
[0] => Array
(
[0] => games
[1] => tv
)
[1] => Array
(
[0] => jane
)
[2] => Array
(
[0] => ads
[1] => media
)
)
答案 0 :(得分: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)
答案 1 :(得分: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);
答案 2 :(得分: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'];
}
答案 3 :(得分: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) } } }