组织和过滤困难和随机的关联/多维数组



我有一个数组,我使用数据库中的某些标识符合并了该数组,以创建一个包含我需要的所有信息的更大数组。我现在需要以一种能够让我轻松组织然后汇总我收集的一些信息的方式过滤或排序这些信息。

这个数组真的很混乱,我从来没有做过这样的过程来"清理"数组,但是在我有限的经验中,数据库是如此无组织,不知道没有更简单的方法或PHP函数来解决这个问题。我也不知道某些术语来寻找这个问题的更简单的解决方案,所以这可能至少部分在其他地方解决,但我不知道要搜索什么。

我的目标是:

  1. 将主索引从现在存在的哈希重命名为简单的 0,1,2...
  2. 删除所有没有"角色 ID"键的数组
  3. 对其余数组中的所有"小时"总数求和,然后添加一个名为"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

)
  1. 可以用array_values(文档)来完成,但也只是将元素添加到数组将使用 int 键
  2. 简单检查isset(文档)检查
  3. 救援array_sum(文档)

请考虑以下简单的伪代码:

foreach($array as $e) {
if (isset["roleID"]) {
$e["totalHours"] = array_sum($e["hours"]);
unset($e["hours"]); // only if you don't want it anymore 
$res[] = $e;
}
}

而且它

最新更新