2014-02-12 2 views
0

Я не могу заставить 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

Ваша функция 'addQuestionClass' не имеет доступа к' $ sectionConfig' массив на всех. Как он может работать, если он даже не может читать значения? –

ответ

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; 
    } 
} 
+0

Я чувствую себя идиотом, было так много проблем с этим, спасибо – user2992596

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; 
    } 
} 
+0

Вам лучше не использовать 'global', см. [Этот ответ] (http://stackoverflow.com/a/12446305/590877) для получения дополнительной информации. Вместо этого просто передайте массив, как в моем ответе. – trizz