Как сгруппировать один и тот же массив

Пример моего массива

Array (
[0] => Array
(
[product_name] => T-Shirt
[product_id] => 231
[user_id] => 22977
)

[1] => Array
(
[product_name] => Shirt
[product_id] => 220
[user_id] => 22977
)

[2] => Array
(
[product_name] => T-Shirt
[product_id] => 226
[user_id] => 16916
)

[3] => Array
(
[product_name] => Bags
[product_id] => 230
[user_id] => 16916
)

[4] => Array
(
[product_name] => Hats
[product_id] => 233
[user_id] => 22977
)

)

Как создать этот массив, чтобы быть

User-Id: 22977
1/ Hats
2/ Shirt
3/ T-ShirtUser-Id: 16916
1/ Bags
2/ T-Shirt

-2

Решение

$a = array();
$a[] = array("product_name" => "T-Shirt", "product_id" => 231, "user_id" => 22977);
$a[] = array("product_name" => "Shirt", "product_id" => 220, "user_id" => 22977);
$a[] = array("product_name" => "T-Shirt", "product_id" => 226, "user_id" => 16916);
$a[] = array("product_name" => "Bags", "product_id" => 230, "user_id" => 16916);
$a[] = array("product_name" => "Hats", "product_id" => 233, "user_id" => 22977);

$return = array();

foreach ($a as $key => $value) {
$return[$value["user_id"]][] = $value["product_name"];
}

foreach ($return as $key => $value) {
echo "User-Id: " . $key . "\r\n";
$i = 0;

foreach ($value as $val) {
echo ++$i . "/ " . $val . "\r\n";
}
}

Выход будет:

User-Id: 22977
1/ T-Shirt
2/ Shirt
3/ Hats
User-Id: 16916
1/ T-Shirt
2/ Bags
0

Другие решения

Вы можете использовать это:

$testarray = array(
array(
"product_name" => 'T-Shirt',
"product_id" => 231,
"user_id" => 22977),
array
(
"product_name" => 'Shirt',
"product_id" => 220,
"user_id" => 22977,
),
array
(
"product_name" => 'T-Shirt',
"product_id" => 226,
"user_id" => 16916,
),
array
(
"product_name" => 'Bags',
"product_id" => 230,
"user_id" => 16916,
),
array
(
"product_name" => 'Hats',
"product_id" => 233,
"user_id" => 22977,
),
);
$newArray = array();

foreach ($testarray as $subArray) {
$newArray[$subArray["user_id"]][] = $subArray['product_name'];
}
var_dump ($newArray);

Выход:

array
22977 =>
array
0 => string 'T-Shirt' (length=7)
1 => string 'Shirt' (length=5)
2 => string 'Hats' (length=4)
16916 =>
array
0 => string 'T-Shirt' (length=7)
1 => string 'Bags' (length=4)
0

<?php
//initialize array
$array = Array(
'0' => Array
(
'product_name' => 'T-Shirt',
'product_id' => 231,
'user_id' => 22977
),

'1' => Array
(
'product_name' => 'Shirt',
'product_id' => 220,
'user_id' => 22977
),

'2' => Array
(
'product_name' => 'T-Shirt',
'product_id' => 226,
'user_id' => 16916
),

'3' => Array
(
'product_name' => 'Bags',
'product_id' => 230,
'user_id' => 16916
),

'4' => Array
(
'product_name' => 'Hats',
'product_id' => 233,
'user_id' => 22977
)
);

//result will be here
$result = array();

foreach ($array as $key => $value) {
//check if we have keys group or names to avoid errors
if(!isset($value['user_id']) || !isset($value['product_name']))
continue;

//make a key in result array if its not exist
if(!isset($result[$value['user_id']]))
{
$result[$value['user_id']] = array($value['product_name']);
}
else
{
//add a values to key if it exists
$result[$value['user_id']][] = $value['product_name'];
//filter same values
$result[$value['user_id']] = array_values(array_unique($result[$value['user_id']]));
}
}
echo '<pre>';
print_r($result);
echo '</pre>';
?>
0
По вопросам рекламы [email protected]