检查多维数组中是否存在值

时间:2015-06-22 14:36:46

标签: php html

我想让我的类别菜单响应所显示的项目。 这些项目有多个类别,因此可以激活多个类别菜单链接。 项目所属的任何类别都是在多维数组中包含的php文件中指定的......

e.g。

$allProjects = array(
    'project1' => array('corporate'),
    'project2' => array('corporate', 'print'),
    'project3' => array('web')
);

现在我想检查每个类别是否是数组的值' project1',' project2',' project3',... $ allProjects,如果是,那么回声'活跃'。

到目前为止,我有......

<?php if (($_GET['cat'] == 'corporate')) {echo 'active';}; || if (isset ($_GET['project'])) {if in_array('corporate', $_GET['project']) {echo 'active';}; ?>

这有意义吗?

更新:

如果存在值(第3级数组),我需要检查特定键(第2级数组)的多维数组

所以我觉得这样的事情......

$project = $_GET('project');
$category = $_GET('cat');

foreach ($allProjects as $project => $categories) {
if in_array($category, $project);
echo 'yes';
}

我使用$ project,上面定义的变量作为关键但不起作用。它希望参数是数组。我想要的是使用项目的名称(在$ project中定义)作为in_array函数的键,并检查值中$ category的外观。

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

您可以使用array_search()搜索阵列中的特定值。此函数返回与找到的值对应的键,否则返回false

所以你要做的就是遍历每个子阵列:

$category = $_GET['cat'];
$allProjects = array(
    'project1' => array('corporate'),
    'project2' => array('corporate', 'print'),
    'project3' => array('web')
);

foreach ($allProjects as $projectName => $categories) {
    $categoryIndex = array_search($category, $categories);
    if ($categoryIndex !== false) {
        echo 'active: ' . $categoryIndex;
        // Do something with $categoryIndex and $projectName here
    }
}

<强>更新

看起来这是你的答案:

$project = $_GET('project');
$category = $_GET('cat');

if (isset($allProjects[$project]) && in_array($category, $allProjects[$project])) {
    echo 'yes';
}

答案 1 :(得分:1)

您可能希望使用foreach遍历数组并相应地设置活动/非活动指示符。

答案 2 :(得分:1)

我不确定,在您的情况下$ _GET ['project']中的内容是什么,但这至少会使您的代码更具可读性。 :)

isActive = false;
foreach($allProjects as $project) {
  if(in_array($_GET['cat'], $project) isActive = true;
}