Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取包含特定子字符串的数组的键?_Php_Arrays - Fatal编程技术网

Php 如何获取包含特定子字符串的数组的键?

Php 如何获取包含特定子字符串的数组的键?,php,arrays,Php,Arrays,这是我的阵列:- $ header_menu = array( ['category'] => array( 'id' => 1, 'title' => 'Test Apple', 'slug' => 'category' ), ['how-to-do'] => array(

这是我的阵列:-

$ header_menu = array(
    ['category'] => array(
                    'id'    => 1,
                    'title' => 'Test Apple',
                    'slug'  => 'category'
                    ),
    ['how-to-do'] => array(
                    'id'    => 1,
                    'title' => 'How to do',
                    'slug'  => 'how-to-do'
                    )               
)
数组是根据表中保存的数据动态形成的。因此,根据管理员在数据库中保存的内容,有时键可以是
'category'
,有时键可以是
'categories'

我需要获取包含子字符串
'categor'
,因为这个字母序列在
'category'
'categories'
中都存在。通过以下代码,我可以检查
'categor'
子字符串是否存在于任何键中:-

if (preg_grep('/^categor/', array_keys($header_menu)))
{

}
一种方法是运行如下循环:-

foreach($header_menu as $key => $row)
{
   if(strpos($key, 'categor') !== false)
   {
       $catKey = $key;
   } 
}

但是,我不想运行循环。是否有其他方法获取匹配的密钥?

如果不想循环获取数组的每个密钥并查找与给定模式匹配的所有密钥,可以使用preg\u grep

$matchingKeys = array_keys($header_menu);
$matchingKeys = preg_grep('/'.'categor'.'\.\d/i', $matchingKeys);

如果您知道只有两个选项category/categories,则可以检查数组中是否存在以下字段之一:

if (isset($header_menu['category'])) {
    $key = 'category';
} elseif (isset($header_menu['categories'])) {
    $key = 'categories';
}
开关
允许多种选项的变化:

switch (true) {
    case isset($header_menu['category']):
        $key = 'category';
        break;

    case isset($header_menu['categories']):
        $key = 'categories';
        break;
}

再说一遍,循环有什么问题?不能在没有循环的情况下迭代数组。几乎所有的数组函数都会在提供的数组上进行迭代。无论哪一个函数都会为此提供帮助,但在内部它只会应用循环。此外,如果您知道键可以是
类别
类别
,那么只需使用
isset/empty
@u\u mulder检查即可,一些愚蠢的客户打开源代码,假装“无所不知”。那些白痴对循环(即他们可以识别为循环的东西)有异议。用你喜欢的定界符内爆所有键,然后使用你的正则表达式魔法。没有循环。为什么在数组中使用
foreach
preg\u grep()会在内部使用循环呢