为了账号安全,请及时绑定邮箱和手机立即绑定

2D数组-按值搜索并返回数组的索引

2D数组-按值搜索并返回数组的索引

PHP
慕村9548890 2021-04-30 14:42:45
我有一个像protected $aPermissions = [    'read' => [        'show'    ],    'update' => [        'edit',        'editProfilePicture'    ]];我想通过可能在子数组中找到的值来获取子数组的数组键(“读取”,“更新”)。因此,搜索“ edit”将返回“ update”,而“ show”将返回“ read”。我尝试了PHP的array_search函数(也是递归地循环执行),但没有设法使它起作用。实现我想要的最佳方法是什么?
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

一种选择是array_filter用于循环遍历数组,并且仅包括包含$search字符串的子数组。使用array_keys提取的关键。


$aPermissions = [

    'read' => [

        'show'

    ],

    'update' => [

        'edit',

        'editProfilePicture'

    ]

];


$search = 'edit';


$result = array_keys(array_filter($aPermissions, function( $o ) use ( $search ) {

    return in_array( $search, $o );

}));

$result 将导致:


Array

(

    [0] => update

)


查看完整回答
反对 回复 2021-05-21
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您可以使用array_walk和in_array获取key,没有返回类型数组,只是简单的键名,否则为null


$aPermissions = [

 'read' => [

    'show'

 ],

 'update' => [

    'edit',

    'editProfilePicture'

 ]

];

$searchAction = 'show';

$keyFound = '';

array_walk($aPermissions, function($value, $key) use ($searchAction, &$keyFound){

  in_array($searchAction, $value) ?  ($keyFound = $key) : '';

}); 

echo $keyFound;

输出


read


查看完整回答
反对 回复 2021-05-21
?
Qyouu

TA贡献1786条经验 获得超11个赞

假设键在第一级,值在第二级,则可以执行以下操作:


$innerKeys = [

    "show",

    "edit"

];


$output = [];


foreach ($array as $key => $value) {

    if (is_array($value)) {

        foreach ($value as $innerKey => $innerValue) {

            if (isset($innerKeys[$innerKey])) $output[$innerKey] = $key;

        }

    }

}

如果您的问题更复杂,那么您将需要向我们提供其他信息。


查看完整回答
反对 回复 2021-05-21
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信