Я пытаюсь понять, как получить данные из следующей структуры данных. Мне удалось сгруппировать плоский массив в следующий массив, но мне трудно найти подходящие ресурсы, чтобы объяснить, как получить данные. Я хочу получить количество предметов в каждой группе. Затем я хотел бы распечатать идентификаторы из внутреннего массива ...
array (
'grinds' =>
array (
0 =>
array (
'id' => 16562,
'slug' => 'grinds',
),
1 =>
array (
'id' => 16561,
'slug' => 'grinds',
),
),
'online-grinds' =>
array (
0 =>
array (
'id' => 16566,
'slug' => 'online-grinds',
),
),
)
Не могли бы вы показать нам, что вы сделали до сих пор? Я предполагаю, что вы должны хотя бы попробовать цикл foreach или 2
Спасибо за ответ, ребята. Я пробовал цикл foreach, но не смог успешно реализовать внутренний цикл foreach, как продемонстрировал EvE в принятом ответе.






$my_array1 = array(
'grinds' =>
array(
0 =>
array(
'id' => 16562,
'slug' => 'grinds',
),
1 =>
array(
'id' => 16561,
'slug' => 'grinds',
),
),
'online-grinds' =>
array(
0 =>
array(
'id' => 16566,
'slug' => 'online-grinds',
),
),
);
получить подсчеты:
$counts = array();
foreach ($my_array1 as $key => $val) {
$counts[$key] = count($val);
}
var_dump($counts);
дает:
array(2) {
["grinds"]=>
int(2)
["online-grinds"]=>
int(1)
}
получить внутренние идентификаторы:
$innerids = array();
foreach ($my_array1 as $key => $val) {
foreach ($val as $key2 => $val2) {
$innerids[] = $val2['id'];
}
}
var_dump($innerids);
дает:
array(3) {
[0]=>
int(16562)
[1]=>
int(16561)
[2]=>
int(16566)
}
Спасибо за это. Это именно то, чего я пытался достичь, и помогло мне лучше понять, как получить доступ к внутреннему массиву.
Вы можете использовать array_map, а затем для каждого элемента использовать array_column и указать имя поля, а затем использовать array_count_values для подсчета уникальных значений.
Затем объедините их в массив и снова используйте существующий ключ в качестве ключа для нового массива.
$arrays = array_map(function($x) {
return [
array_count_values(array_column($x, 'id')),
array_count_values(array_column($x, 'slug'))
];
}, $arrays);
print_r($arrays);
Результат
Array
(
[grinds] => Array
(
[0] => Array
(
[16562] => 1
[16561] => 1
)
[1] => Array
(
[grinds] => 2
)
)
[online-grinds] => Array
(
[0] => Array
(
[16566] => 1
)
[1] => Array
(
[online-grinds] => 1
)
)
)
Спасибо за это. Это определенно работает и удовлетворяет мои потребности. Я принял другой ответ от Евы, так как это было именно то, что я пытался реализовать, но не преуспел в этом.
Откуда этот массив? Можете ли вы суммировать в источнике (предположительно на уровне db?)