这是我的数组:-
$ 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;
}
}
但是,我不想运行循环。还有其他方法可以获取匹配的密钥吗?
答案 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);