【问题标题】:Loop 2 arrays and compare is there equal values ( Undefined offset)循环 2 个数组并比较是否存在相等的值(未定义的偏移量)
【发布时间】:2019-03-19 03:27:22
【问题描述】:

我有 2 个数组 $group_permissions$result 在循环 $result 数组时,我将来自 $group_permissions 数组的 $group_permissions[$keys]->perm_id 与来自 $result 数组的 $result[$keys]->id 进行比较。 但$group_permissions 数组中的记录少于$result 数组中的记录。所以循环时发生错误

消息:未定义的偏移量:14

$result array
Array
(
    [0] => stdClass Object
        (
            [id] => 1025
            [name] => Library Membership
            [permission_code] => library_membership
            [hash_code] => 7f7758029e0b3b7f0154e98779f66082
            [description] => Library Membership
            [parent_id] => 0
            [level] => 1
            [sequence] => 10000
            [is_child] => 0
        )

    [1] => stdClass Object
        (
            [id] => 514
            [name] => Member Profiles
            [permission_code] => mem_pro
            [hash_code] => f3e3f0150a0172eca3f3279f9d3919d6
            [description] => Member Profiles
            [parent_id] => 0
            [level] => 1
            [sequence] => 10008
            [is_child] => 0
        )

$group_permissions array

Array
(
    [0] => stdClass Object
        (
            [perm_id] => 1321
        )

    [1] => stdClass Object
        (
            [perm_id] => 1322
        )

    [2] => stdClass Object
        (
            [perm_id] => 1323
        )

    [3] => stdClass Object
        (
            [perm_id] => 1324
        )

这是我的代码。

$group_permissions = $this->get_group_permissions($user_id);

        $result = $this->getPermisstions();

        $parent_id = array();

        foreach ($result as $keys => $row)
        {
            $sub_data["id"] = $result[$keys]->id;
            $sub_data["text"] = $result[$keys]->name;
            if ($group_permissions[$keys]->perm_id == $result[$keys]->id) {

                $sub_data["state"] = ['selected' => true, 'disabled' => true];
            }
            array_push($parent_id, $result[$keys]->id);

            $data[] = $sub_data;
        }

如果 2 个数组中有相等的值,我想将此 $sub_data["state"] = ['selected' => true, 'disabled' => true]; 添加到 $sub_data 数组中。

【问题讨论】:

  • 为什么要依赖基于相同键的项目是否具有相同的 ID?实际的数据结构是什么?为什么只有在相等时才添加state 数组?我会以更一致的方式执行后者,以确保有一些 state 数组始终具有某些键。这一切都可能适用于底层结构,但是,它可能不是一种有效的方法。
  • 您应该提供更多信息以获得更合适的答案。
  • 请提供输入数组数据并告诉我们需要检查/比较的内容。仅理解文本和代码是困难的。我正在投票,所以你可以改进你的问题。这个问题将来也可能对其他人有用。
  • @Jigar 问题使用输入数组更新,我想检查 perm _id 是否在 $reult 数组中(如果可用)我想设置 $sub_data["state"] = ['selected' => true, '禁用' => true];

标签: php arrays foreach compare


【解决方案1】:

您比较两个数组的值,您可以使用如下array_key_exist 函数检查$group_permissions 数组是否具有特定键:

if (array_key_exists($keys, $group_permissions)) {
    if ($group_permissions[$keys]->perm_id == $result[$keys]->id) {
        $sub_data["state"] = ['selected' => true, 'disabled' => true];
    }
}

所以你的代码只有在你有相同的密钥时才能工作。希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多