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

时间:2019-06-27 07:27:30

标签: php arrays

这是我的数组:-

$ 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;
   } 
}

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

2 个答案:

答案 0 :(得分:2)

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

if (isset($header_menu['category'])) {
    $key = 'category';
} elseif (isset($header_menu['categories'])) {
    $key = 'categories';
}

switch变体,它允许许多选项:

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

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

答案 1 :(得分:0)

如果您不想使用array_keys()来遍历以获得数组的每个键并查找与给定模式匹配的所有键,则可以使用preg_grep。

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