in_array($ variable ['key'],$ another ['key'])无效

时间:2014-02-12 09:21:53

标签: php arrays

我无法让in_array工作。它在一个函数中运行,该函数在我包含的文件中定义,然后从原始文件调用函数...这太复杂了,我将添加代码:

index.php

$results = $database->get_results($query);
foreach ($results as $question) {
    echo '<div class="'.addQuestionClass($question).'"></div>';
}

functions.php

$sectionConfig = array(
    'amount' => '20',
    'types' => array('textarea', 'text', 'select', 'number'),
);

function addQuestionClass($question) {
    if(is_array($question)) {
        $order = 'order-'.$question['order'];
        $id = ' question-'.$question['id'];

        if(in_array($question['answer'], $sectionConfig['types'])) {
            $answertype = ' type-'.$question['answer'];
            echo 'true';
        } else {
            $answertype = null;
            echo 'false';
        }

        return $answertype;
    } else {
        return;
    }
}

问题代码在我的addClass函数中:

in_array($question['answer'], $sectionConfig['types'])

如果我运行相同的代码,使用粘贴在$ sectionConfig中的数组,如下所示,它可以正常工作,但它永远不会以我上面的格式识别。

这有效:

in_array($question['answer'], array('textarea', 'text', 'select', 'number'))

2 个答案:

答案 0 :(得分:3)

您正在访问功能中的$sectionConfig。默认情况下,这是另一个范围,函数中的代码不知道$sectionConfig存在。

您可以尝试这样的事情:

$sectionConfig = array(
    'amount' => '20',
    'types' => array('textarea', 'text', 'select', 'number'),
);

$results = $database->get_results($query);
foreach ($results as $question) {
    echo '<div class="'.addQuestionClass($question,$sectionConfig).'"></div>';
}

function addQuestionClass($question,$sectionConfig) {
    if(is_array($question)) {
        $order = 'order-'.$question['order'];
        $id = ' question-'.$question['id'];

        if(in_array($question['answer'], $sectionConfig['types'])) {
            $answertype = ' type-'.$question['answer'];
            echo 'true';
        } else {
            $answertype = null;
            echo 'false';
        }

        return $answertype;
    } else {
        return;
    }
}

答案 1 :(得分:1)

问题是您的变量$sectionConfig不在您的函数范围内。您可以使用global将其置于函数范围内,或将其作为变量传递:

function addQuestionClass($question) {
    global $sectionConfig; // This gets your variable in the right scope.
    if(is_array($question)) {
        $order = 'order-'.$question['order'];
        $id = ' question-'.$question['id'];

        if(in_array($question['answer'], $sectionConfig['types'])) {
            $answertype = ' type-'.$question['answer'];
            echo 'true';
        } else {
            $answertype = null;
            echo 'false';
        }

        return $answertype;
    } else {
        return;
    }
}