【发布时间】:2020-06-29 20:28:40
【问题描述】:
我有一个这样的array:
Array
(
[05049207256] => Array
(
[0] => Array
(
[ID_NUMBER] => 05049207256
[CID] => 29113082
[GROUP_ID] =>
[B_CODE] => 10152/6277
)
[1] => Array
(
[ID_NUMBER] => 05049207256
[CID] => 29093574
[GROUP_ID] =>
[B_CODE] => 10241/6244
)
)
[16992375298] => Array
(
[0] => Array
(
[ID_NUMBER] => 16992375298
[CID] => 29112537
[GROUP_ID] => 398242
[B_CODE] => 10152/6277
)
[1] => Array
(
[ID_NUMBER] => 16992375298
[CID] => 29112169
[GROUP_ID] => 398223
[B_CODE] => 10152/6276
)
)
[21871540019] => Array
(
[0] => Array
(
[ID_NUMBER] => 21871540019
[CID] => 29112605
[GROUP_ID] => 398048
[B_CODE] => 10152/6277
)
[1] => Array
(
[ID_NUMBER] => 21871540019
[CID] => 29113036
[GROUP_ID] => 398040
[B_CODE] => 10152/6277
)
[2] => Array
(
[ID_NUMBER] => 21871540019
[CID] => 29112733
[GROUP_ID] => 398039
[B_CODE] => 10152/6277
)
[3] => Array
(
[ID_NUMBER] => 21871540019
[CID] => 29110803
[GROUP_ID] => 398039
[B_CODE] => 10152/6275
)
)
[19897986583] => Array
(
[0] => Array
(
[ID_NUMBER] => 19897986583
[CID] => 29112613
[GROUP_ID] =>
[B_CODE] => 10152/6277
)
[1] => Array
(
[ID_NUMBER] => 19897986583
[CID] => 29111627
[GROUP_ID] =>
[B_CODE] => 10152/6276
)
)
[21228943839] => Array
(
[0] => Array
(
[ID_NUMBER] => 21228943839
[CID] => 29112573
[GROUP_ID] => 398250
[B_CODE] => 10152/6277
)
[1] => Array
(
[ID_NUMBER] => 21228943839
[CID] => 29111947
[GROUP_ID] => 3982505
[B_CODE] => 10152/6276
)
[2] => Array
(
[ID_NUMBER] => 21228943839
[CID] => 29111947
[GROUP_ID] =>
[B_CODE] => 10152/6276
)
)
)
我想重新排列其中的一些内容:
如果array只有一个子数组,不管'GROUP_ID'值,删除它:
[80388889886] => Array
(
[0] => Array
(
[ID_NUMBER] => 80388889886
[CID] => 29122690
[GROUP_ID] => --> some value or empty value
[B_CODE] => 10152/6295
)
)
如果array 有两个或多个子数组,并且存在至少一个“GROUP_ID”值(如果有多个 GROUP_ID,则可以使用一个随机 GROUP_ID 值),取该值并将其分配给其中的所有其他 GROUP_ID子数组,无论是否存在现有或空的 GROUP_ID 值,
(除非数组也有两个或多个子数组,并且子数组中的所有 GROUP_ID 值都为空,否则保持它们为空):
[85225663143] => Array
(
[0] => Array
(
[ID_NUMBER] => 85225663143
[CID] => 29098209
[GROUP_ID] =>
[B_CODE] => 10241/6244
)
[1] => Array
(
[ID_NUMBER] => 85225663143
[CID] => 29122764
[GROUP_ID] => 399676
[B_CODE] => 10152/6295
)
)
到:
[85225663143] => Array
(
[0] => Array
(
[ID_NUMBER] => 85225663143
[CID] => 29098209
[GROUP_ID] => 399676
[B_CODE] => 10241/6244
)
[1] => Array
(
[ID_NUMBER] => 85225663143
[CID] => 29122764
[GROUP_ID] => 399676
[B_CODE] => 10152/6295
)
)
或:
[92723208008] => Array
(
[0] => Array
(
[ID_NUMBER] => 92723208008
[CID] => 29134479
[GROUP_ID] => 399733
[B_CODE] => 10304/6332
)
[1] => Array
(
[ID_NUMBER] => 92723208008
[CID] => 29122696
[GROUP_ID] => 399764
[B_CODE] => 10152/6295
)
[2] => Array
(
[ID_NUMBER] => 92723208008
[CID] => 2912665
[GROUP_ID] => 399777
[B_CODE] => 10152/6295
)
)
到:
[92723208008] => Array
(
[0] => Array
(
[ID_NUMBER] => 92723208008
[CID] => 29134479
[GROUP_ID] => 399733
[B_CODE] => 10304/6332
)
[1] => Array
(
[ID_NUMBER] => 92723208008
[CID] => 29122696
[GROUP_ID] => 399733
[B_CODE] => 10152/6295
)
[2] => Array
(
[ID_NUMBER] => 92723208008
[CID] => 2912665
[GROUP_ID] => 399733
[B_CODE] => 10152/6295
)
)
我已经解决了第一个问题,但是我在第二部分中的情况没有按预期工作,这是我的代码:
foreach ($result as $key => $val) {
foreach ($val as $key1 => $val1) {
if (count(array_keys($val)) == 1) {
unset ($result[$key]);
}
if (count(array_keys($val)) >= 2 && empty($result[$key][$key1]['GROUP_ID'])) {
$assign_value = $val[0]['GROUP_ID'];
$result[$key][$key1]['GROUP_ID'] = $assign_value;
}
}
}
任何帮助将不胜感激。谢谢
【问题讨论】:
-
您能否将此示例输入数据显示为
var_export,好吗?这使人们更容易获得一个可以使用的工作示例。 -
我想我会先在第一个 foreach 级别使用
array_column,从子数组中提取GROUP_ID值。count是 1?然后我们得到了您的第一个案例,只有一个子数组,所以这是您要删除/取消设置的元素。接下来,将array_unique应用于这些值。如果 that 的计数再次为 1,and 值是“空”(无论这实际上意味着什么 - 空字符串、null、false?) - 那么我们有你的情况其中 allGROUP_ID为空,在这种情况下无事可做。 […] -
[...] 如果计数 not 1,那么您至少有两个不同的组 ID。选择一个(确保它不是空的),并应用于所有子数组元素。
-
嗯,输入数据来自 sql 查询,该查询的输出是问题开头的数组。
-
“并且该查询的输出是问题开头的数组” - 是的,但其格式难以转换为有效的 PHP 代码。请为它创建一个
var_export,它将生成我们可以通过复制和粘贴获取的PHP代码,以便我们可以立即使用。
标签: php multidimensional-array