我不知道如何检查值是否在数组中

时间:2017-02-26 19:21:21

标签: php arrays

    Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => comments
                )

            [1] => Array
                (
                    [0] => approve
                    [1] => delete
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => users
                )

            [1] => Array
                (
                    [0] => info
                    [1] => ban
                )

        )

)

我有这个阵列。我想检查此用户组是否具有这些权限。在这个数组中还有另外两个数组。第一个是类别,而第二个是包含连接到该部分的操作的数组。例如:我在这个组中,所以我可以在管理面板中看到“评论”部分,我可以批准和删除评论,但我无法编辑评论,因为此操作不在数组中。好吧,我知道这有点难以理解,但我需要你的帮助。 (im italian)< 3

5 个答案:

答案 0 :(得分:0)

首先,我建议你理智地使用命名的数组键而不是数字键。

然后将使用PHP in_array()

的手册

所以你可以这样做:

$myArray = <your original array>;

foreach($myArray as $row){  
    if(in_array("delete",$row[1])){
       print "Delete is in array. you can edit ".$row[0][0];
    } 
}
unset($row);

<强>输出:

 Delete is in array. you can edit comments.
  //no output for array "users" as can't delete users. 

答案 1 :(得分:0)

像这样的小型递归函数可能很方便。它检查子元素是否为数组。

function checkarrayRec($array,$permissions=["info","ban","delete","approve"]) {
    if(is_array($array)) {
        foreach($array as $key => $a) {
            if(is_array($a)) {
            checkarrayRec($a);
            } else {
            if(!empty($a) and in_array($a,$permissions)) {
               echo "Found: ".$a."\n";
            }
            }
        }
    }
}
$array = [[[0,1],[1,2]],[[3,4],["delete","approve"]]];
checkarrayRec($array) ;
// output is 
Found: delete
Found: approve

PHP Sandbox

上查看

答案 2 :(得分:0)

要检查某些东西是否是数组的元素,您需要使用函数in_array - 这需要两个参数,第一个是您要检查的元素,第二个是数组本身。

根据您的解释,您有三个嵌套数组,也就是说,数组内的数组内的数组。

提供第一个索引,因为这是用户的索引。 从$ myarray [userId]我们有两个嵌套数组 - 一个数组内的数组,索引已知,因为每个类别总有两个。这里有两种可能的情况:

  1. 您想要查找某个值是否在任何类别中。
  2. 您想要查找某个值是否属于特定的类别。
  3. 由于结构原因,这两者都需要您遍历数组。查找权限是否属于特定类别只需在循环中进行额外检查。

    查找权限是否属于任何类别:

    foreach ($myArray[$userId] as $permissionCategory) {
        return in_array("permission", $permissionCategory[1]);
    }
    return false;
    

    查找权限是否属于特定类别:

    foreach ($myArray[$userId] as $permissionCategory) {
        if ($permissionCategory[0][0] == "category") {
            return in_array("permission", $permissionCategory[1]);
        }
    }
    return false;
    

答案 3 :(得分:0)

Martin工作的帮助......唯一的问题是我不知道数组编号(in_array(“delete”,$ row [1])。实际上我有这个字符串定义了特定组的权限哪些用户属于:评论:批准,删除|用户:信息,禁止

此字符串通过爆炸转换为数组,删除“/:” 那我们就有了:
评论 - &gt;与本CAT相关的许可:批准删除
用户 - &gt;与此CAT连接的权限:信息(请参阅用户信息)禁止(禁止用户)

但我可以在字符串中添加其他元素,所以我无法知道数组编号。

答案 4 :(得分:-1)

<?php
    $os = array("Mac", "NT", "Irix", "Linux");
    if (in_array("Irix", $os)) {
        echo "Got Irix";
    }
    elseif (in_array("mac", $os)) {
        echo "Got mac";
    }
    else{
        echo "Not found";
    }
?>