У меня есть массив, который я объединил, используя определенные идентификаторы в базе данных, чтобы создать массив большего размера со всей необходимой мне информацией. Теперь мне нужно отфильтровать или отсортировать эту информацию таким образом, чтобы я мог легко упорядочить и затем суммировать некоторую информацию, которую я собрал.
Этот массив действительно грязный, и мне просто никогда не приходилось делать такой процесс для «очистки» массива, но в моем ограниченном опыте база данных настолько неорганизована, что я не знал более простого метода или функций PHP, чтобы это исправить. Я также не знаю определенной терминологии для поиска более простых решений этой проблемы, поэтому ее можно решить где-то еще, хотя бы частично, но я не знал, что искать.
Мои цели:
- Переименуйте первичный индекс из хэшей, которые присутствуют сейчас, просто в 0,1,2 ...
- Удалить ВСЕ массивы, в которых нет ключа "roleID"
- Суммируйте все итоговые значения 'часов' в оставшихся массивах, а затем добавьте новый ключ с именем "totalHours", который будет иметь значение итоговой суммы часов за этот конкретный массив.
Я пробовал перебирать массивы и использовать вложенные циклы for, но нумерация в этих массивах делает так, что мне нужно переименовать их, прежде чем я смогу правильно использовать эти методы.
Причина, по которой ключи в «часах» так неудобны, связана с тем, как я получаю часы из базы данных. Я не могу искать на основе пользователя.
Array
(
[5b6468a500277c71b98405b1f140991c] => Array
(
[roleID] => 5b6468a500277c71b98405b1f140991c
[ID] => 5b6468a500277c71b98405b1f140991c
[name] => CED
[rateValue] => 10
[hours] => Array
(
[23] => 0.25
[36] => 0.5
[38] => 0.5
[43] => 0.5
[53] => 0.5
[57] => 1
[60] => 1
[61] => 1
[62] => 1
[63] => 1
[64] => 1
[66] => 1
[71] => 2
[73] => 2.5
[79] => 7.5
)
)
[5b6468a500277c74f6b2c065436b7d17] => Array
(
[roleID] => 5b6468a500277c74f6b2c065436b7d17
[ID] => 5b6468a500277c74f6b2c065436b7d17
[name] => ADR
[rateValue] => 100
[hours] => Array
(
[4] => 0.25
[76] => 3
)
)
[5b6468a500277c80b63cfcc15c2dacf2] => Array
(
[ID] => 5b6468a500277c80b63cfcc15c2dacf2
[name] => DST
[rateValue] => 195
)
Моя цель в первой итерации состояла бы в том, чтобы три вышеуказанных массива выглядели так:
Array
(
// changed from hash to '0'
[0] => Array
(
[roleID] => 5b6468a500277c71b98405b1f140991c
[ID] => 5b6468a500277c71b98405b1f140991c
[name] => CED
[rateValue] => 10
[hours] => Array
(
[23] => 0.25
[36] => 0.5
[38] => 0.5
)
)
[1] => Array
(
[roleID] => 5b6468a500277c74f6b2c065436b7d17
[ID] => 5b6468a500277c74f6b2c065436b7d17
[name] => ADR
[rateValue] => 100
[hours] => Array
(
[4] => 0.25
[76] => 3
)
)
[2] => Array
(
[ID] => 5b6468a500277c80b63cfcc15c2dacf2
[name] => DST
[rateValue] => 195
)
Тогда во втором выглядеть так (при необходимости)
Array
(
[0] => Array
(
[roleID] => 5b6468a500277c71b98405b1f140991c
[ID] => 5b6468a500277c71b98405b1f140991c
[name] => CED
[rateValue] => 10
// hours array keys changed for simpler addition (if you think this is necessary)
[hours] => Array
(
[0] => 0.25
[1] => 0.5
[2] => 0.5
)
)
[1] => Array
(
[roleID] => 5b6468a500277c74f6b2c065436b7d17
[ID] => 5b6468a500277c74f6b2c065436b7d17
[name] => ADR
[rateValue] => 100
[hours] => Array
(
[0] => 0.25
[1] => 3
)
// index 2 in step 1 deleted because it does not have the roleID key/value
)
Тогда в третьем должно выглядеть так:
Array
(
[0] => Array
(
[roleID] => 5b6468a500277c71b98405b1f140991c
[ID] => 5b6468a500277c71b98405b1f140991c
[name] => CED
[rateValue] => 10
[hours] => Array
(
[0] => 0.25
[1] => 0.5
[2] => 0.5
)
)
[1] => Array
(
[roleID] => 5b6468a500277c74f6b2c065436b7d17
[ID] => 5b6468a500277c74f6b2c065436b7d17
[name] => ADR
[rateValue] => 100
[hours] => Array
(
[0] => 0.25
[1] => 3
)
//third element deleted because it does not have the roleID key/value
)
Тогда наконец:
Array
(
[0] => Array
(
[roleID] => 5b6468a500277c71b98405b1f140991c
[ID] => 5b6468a500277c71b98405b1f140991c
[name] => CED
[rateValue] => 10
[hours] => Array
(
[0] => 0.25
[1] => 0.5
[2] => 0.5
)
[totalHours] => 1.25
)
[1] => Array
(
[roleID] => 5b6468a500277c74f6b2c065436b7d17
[ID] => 5b6468a500277c74f6b2c065436b7d17
[name] => ADR
[rateValue] => 100
[hours] => Array
(
[0] => 0.25
[1] => 3
)
[totalHours] => 3.25
)