首页 > 解决方案 > 如何在PHP中的现有数组中推送基于条件的值

问题描述

我有三个数组

  1. 主题已选
  2. 相关组
  3. 主题已分配
$topicsSelected = [ "T-100","T-600"];

$relavantGroups = [
                    [ "id" => "G-001","name" => "3 A","active" => false ], 
                    ["id" => "G-002","name" => "3 B","active" => false]  
                  ];

$topicAssingned = [
    "G-001" => [
        "groupID" => "G-001",
        "groupName" => "3 A",
        "topics" => [
            "T-100" => [
                "topicID" => "T-100"
            ],
            "T-200" => [
                "topicID" => "T-200"
            ]
        ]
    ],
    "G-002" => [
        "groupID" => "G-002",
        "groupName" => "3 B",
        "topics" => [
            "T-400" => [
                "topicID" => "T-400"
            ],
            "T-500" => [
                "topicID" => "T-500"
            ]
        ]
    ],
];

$topicsSelected数组值至少应该存在一个值$topicAssingned意味着基于 groupID,我必须将一个值推送到$relavantGroups喜欢 禁用:D 假设值不存在意味着禁用:A

预期输出:

[
     "id" => "G-001",
    "name" => "3 A",
    "active" => false,
    "disable" => "D"
],
[
     "id" => "G-002",
    "name" => "3 B",
    "active" => false,
    "disable" => "A"
]

标签: phpphp-5.6

解决方案


你问的不是很清楚,代码有点奇怪,但我会试一试。首先修复你的数组声明——你应该使用=>而不是:

您必须$relavantGroups遍历和为每个元素迭代$topicAssingned数组。然后执行一个简单的比较,看看组Id是否存在,你就完成了!

这是我的解决方案(又快又脏): 你可以在这里看到

foreach ($relavantGroups as &$g) {
    $found = false;
    foreach ($topicAssingned as $key => $assigned) {
        if ($key === $g["id"] && is_array($assigned["topics"])) {
            foreach ($assigned["topics"] as $topic) {
                if (in_array($topic["topicID"], $topicsSelected)) {
                    $found = true;
                    break;
                }
            }
        }
    }
    $g["disable"] = $found ? "D" : "A";
}
var_dump($relavantGroups);

更新了解决方案 - 请注意,我正在使用in_array()它来确定是否topicID存在。这意味着$topicsSelected数组中的任何值都会影响结果。

希望我有所帮助。

这将输出(基于您的示例):

array(2) {
  [0]=> array(4) {
    ["id"]=> string(5) "G-001"
    ["name"]=> string(3) "3 A"
    ["active"]=> bool(false)
    ["disable"]=> string(1) "D"
  }
  [1]=> array(4) {
    ["id"]=> string(5) "G-002"
    ["name"]=> string(3) "3 B"
    ["active"]=> bool(false)
    ["disable"]=> string(1) "A"
  }
}

推荐阅读