猿问

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

我有一个像


protected $aPermissions = [

    'read' => [

        'show'

    ],

    'update' => [

        'edit',

        'editProfilePicture'

    ]

];

我想通过可能在子数组中找到的值来获取子数组的数组键(“读取”,“更新”)。因此,搜索“ edit”将返回“ update”,而“ show”将返回“ read”。


我尝试了PHP的array_search函数(也是递归地循环执行),但没有设法使它起作用。实现我想要的最佳方法是什么?


慕村9548890
浏览 135回答 3
3回答

慕的地6264312

一种选择是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)

慕无忌1623718

您可以使用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

Qyouu

假设键在第一级,值在第二级,则可以执行以下操作:$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;        }    }}如果您的问题更复杂,那么您将需要向我们提供其他信息。
随时随地看视频慕课网APP
我要回答