[英]How to make list of array objects with key value pair in php or 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.