Использовать столбец массива.
Основная идея такова:
[['id'=>1],['id'=>2]]
count(array_column($array, 'id'));
То, что это делает, array_column, высасывает все с id
, поэтому мы рассчитываем этот массив[1,2]
Похоже, added_by
является вложенным объектом.Таким образом, вы можете сделать это следующим образом:
$json = '[{
"added_at" : "2018-07-30T14:24:24Z",
"added_by" : {
"href" : "https://api.spotify.com/v1/users/ina-78",
"id" : "ina-78",
"type" : "user",
"uri" : "spotify:user:ina-78"
}},{
"added_at" : "2018-07-30T14:24:24Z",
"added_by" : {
"href" : "https://api.spotify.com/v1/users/ina-78",
"id" : "ina-78",
"type" : "user",
"uri" : "spotify:user:ina-78"
}}]';
$added_by = array_column($array, 'added_by');
print_r($added_by);
$ids = array_column($added_by, 'id');
print_r($ids);
//or as a single line - we can replace $added_by with array_column($array, 'added_by')
//$ids = array_column(array_column($array, 'added_by'), 'id');
Вывод (заметьте, мне было проще сделать данные в формате JSON, это только для примера, поскольку я не могу использовать API)
//$added_by = array_column($array, 'added_by');
Array
(
[0] => stdClass Object
(
[href] => https://api.spotify.com/v1/users/ina-78
[id] => ina-78
[type] => user
[uri] => spotify:user:ina-78
)
[1] => stdClass Object
(
[href] => https://api.spotify.com/v1/users/ina-78
[id] => ina-78
[type] => user
[uri] => spotify:user:ina-78
)
)
//$ids = array_column($added_by, 'id');
Array
(
[0] => ina-78
[1] => ina-78
)
Сначала мы получаем added_by
из родительского массива, затем идентификатор из этого набора данных.По сути, мы разворачиваем массив на один столбец.Теперь, когда у нас есть хороший аккуратный массив для работы, мы можем использовать любые стандартные функции массива, такие как count
или array_count_values
.
count($ids); //2
array_count_values($ids); //['ina-78'=>2]
И т.д.
array_column () возвращает значения из одного столбца ввода, идентифицированного ключом column_key.Необязательно, index_key может быть предоставлен для индексации значений в возвращенном массиве по значениям из столбца index_key входного массива.
http://php.net/manual/en/function.array-column.php
Собрав все это вместе, мы можем сделать все это в одной строке и пропустить загрязнение нашего пространства кучей бесполезных локальных переменных:
Подсчет общего ID (с подсчетом)
echo "\n".count(array_column(array_column($array, 'added_by'), 'id'))."\n";
Выход
2
Песочница
Подсчет каждого идентификатора (с массивом_значений)
Например:
print_r(array_count_values(array_column(array_column($array, 'added_by'), 'id')));
Выход:
//count of each id
Array
(
[ina-78] => 2
//[ina-79] => 1 - for example
)
Песочница
Одна последняя заметка
Поскольку я не могу узнать, что в ней содержится, так как она не включена.Я просто предположил, что это массив.
Вот мои результаты
/*
What is this
Array or
stdClass Object ?
*/
(
[added_at] => 2018-07-30T14:24:24Z
[added_by] => stdClass Object
(
[external_urls] => stdClass Object
(
[spotify] => https://open.spotify.com/user/ina-78
)
[href] => https://api.spotify.com/v1/users/ina-78
[id] => ina-78
[type] => user
[uri] => spotify:user:ina-78
)
Если, однако, это объект, вы можете просто привести объект к массиву с помощью (array)$object
или
print_r(array_count_values(array_column(array_column((array)$array, 'added_by'), 'id')));
Надеюсь, что это имеет смысл.