#php #arrays #key #exists
#php #массивы #Клавиша #существует
Вопрос:
У меня есть следующий массив, который имеет идентификатор в качестве индекса, а некоторый — в качестве значения. Конечная цель — получить общее количество уникальных идентификаторов в другом массиве.
Массив ( [0] => Массив ( [0] => Командный объект ( [id] => 1 [countStat] => 25 ) ) [1] => Массив ( [0] => Командный объект ( [id] => 2 [countStat] => 24 ) ) [2] => Массив ( [0] => Командный объект ( [id] => 1 [countStat] => 23 ) ) [3] => Массив ( [0] => Командный объект ( [id] => 3 [countStat] => 23 ) ) [4] => Массив ( [0] => Командный объект ( [id] => 5 [countStat] => 21 ) ) [5] => Массив ( [0] => Командный объект ( [id] => 3 [countStat] => 21 ) ) [6] => Массив ( [0] => Командный объект ( [id] => 5 [countStat] => 20 ) ) [7] => Массив ( [0] => Командный объект ( [id] => 2 [countStat] => 20 ) ) )
Я хочу результат, подобный приведенному ниже.
Массив ( [0] => Массив ( [0] => Командный объект ( [id] => 1 [countStat] => 48 ) ) [1] => Массив ( [0] => Командный объект ( [id] => 2 [countStat] => 44 ) ) [3] => Массив ( [0] => Командный объект ( [id] => 3 [countStat] => 44 ) ) [4] => Массив ( [0] => Командный объект ( [id] => 5 [countStat] => 41 ) ) )
Я потратил несколько часов на работу над этим, но не смог найти решение. Кто-нибудь, пожалуйста, может помочь?
Спасибо.
Комментарии:
1. Не могли бы вы поделиться своим кодом? что именно вы пробовали? что такое
Team Object
? как вы можете получить доступ к полям «id» и «countStat»?2. вы получаете этот массив из запроса mysql?
3. не была бы эта структура лучше? Массив ([0] => Array ( [id] => 1 [countStat] => 48 ) [1] => Массив ( [id] => 2 [countStat] => 48 ) [2] => Array ( [id] => 3 [countStat] => 48 ) ) зачем вам дополнительный слой, собираетесь ли вы разместить там другие массивы наряду с «объектом Team»?
4. @jameson2012 Да, это происходит из запроса mysql.
5. @jameson2012 Было бы неплохо удалить этот слой и выполнить вычисления, я попробую это сейчас …. и да, в конечном итоге мне придется объединить это с другими объектами team.
Ответ №1:
Похоже, вы хотите суммировать данные о количестве объектов team для похожих идентификаторов. Я создал аналогичную структуру данных, прошелся по ней циклом, чтобы сформировать временный массив, который использует идентификатор в качестве ключа, с соответствующими суммами (для последующего суммирования — моя — amount, ваша — countStats). Затем суммируйте их и воссоздайте желаемый результат.
<?php
class Team
{
public $id;
public $amount;
public function __construct($id, $amount)
{
$this->id = $id;
$this->amount = $amount;
}
}
$input =
[
[new Team(1, 3)],
[new Team(1, 4)],
[new Team(2, 5)],
[new Team(2, 7)]
];
foreach($input as $subarray)
$amounts[$subarray[0]->id][]=$subarray[0]->amount;
print_r($amounts);
foreach($amounts as $k => $v)
$result[] = [new Team($k, array_sum($v))];
print_r($result);
Вывод:
Array
(
[1] => Array
(
[0] => 3
[1] => 4
)
[2] => Array
(
[0] => 5
[1] => 7
)
)
Array
(
[0] => Array
(
[0] => Team Object
(
[id] => 1
[amount] => 7
)
)
[1] => Array
(
[0] => Team Object
(
[id] => 2
[amount] => 12
)
)
)