簡體   English   中英

如何檢查數組的數組在PHP或Laravel中其值中是否具有鍵值對

[英]How to check whether an array of array have a key value pair in its values in PHP or Laravel

我有以下數組。 我想知道數組的任何值是否包含鍵值對"RoleCode" => "Admin"

[
  0 => [
    "RoleCode" => "Admin"
    "RoleName" => "Administrator"
  ]
  1 => [
    "RoleCode" => "PM"
    "RoleName" => "ProjectManager"
  ]
  2 => [
    "RoleCode" => "ScheduleUser"
    "RoleName" => "Schedule User"
  ]
]

我可以編寫一個長代碼來查找它,如下所示:

$isAdmin = false;
foreach ($user['Roles'] as $role) {
    if ($role['RoleCode'] == 'Admin') {
        $isAdmin = true;
    }
}

有什么辦法可以更好地做到這一點?

您可以使用array_column()in_array()

$isAdmin = in_array('Admin', array_column($user['Roles'], 'RoleCode')) ;
  • array_column()將返回具有'RoleCode'鍵的所有值的數組
  • in_array()將檢查Admin是否在內部

這取決於哪種更好的方法。

找到項目時添加break當前解決方案:

$isAdmin = false;
foreach ($user['Roles'] as $role) {
    if ($role['RoleCode'] == 'Admin') {
        $isAdmin = true;
        break;
    }
}

在最壞的情況下將為O(n)

其他解決方案,如另一個答案

$isAdmin = in_array('Admin', array_column($user['Roles'], 'RoleCode'));

這將是O(n) + O(1)在最好的情況下和O(n) + O(n)在最差。 不僅僅是最初的foreach

另一個是過濾:

$isAdmin = !empty(array_filter(
    $user['Roles'], 
    function ($v) { return $v['RoleCode'] == 'Admin'; }
));

總是O(n)

因此,從可讀性和性能的角度來看,初始代碼是贏家。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM