2014-11-05 7 views
0

У меня возникли проблемы с удалением нулевых значений из массива с использованием значений из базы данных. Эти нулевые значения обычно находятся в «ответах». Код ниже:Удалить нулевые значения из массива

$getQuestions = mysql_logging_query("SELECT fq.`question_id`, fq.`ques_form_id`, fq.`question_body`, fq.`type`, fq.`answer1`, fq.`answer2`, fq.`answer3`, fq.`answer4`, fq.`answer5`, fq.`answer6`, fq.`min_validation`, fq.`max_validation` 
               FROM QuestionnaireFormQuestions fq 
               LEFT JOIN QuestionnaireForms f 
               ON f.`form_id` = fq.`ques_form_id` 
               WHERE f.`active` = 1 
               AND f.`form_id` = '".mysql_real_escape_string($form_id,$this->dbcon)."' 
               ",$this->dbcon); 

      if($getQuestions && mysql_num_rows($getQuestions)>0 && mysql_error($this->dbcon)=="") 
      {   
       $get_questions_array = array(); 

       while($getQuestions && $getQuestions_rec=mysql_fetch_assoc($getQuestions)) 
       { 
        $get_questions_array[] = array('question_id' => $getQuestions_rec['question_id'], 
               'related_form_id' => $getQuestions_rec['ques_form_id'], 
               'question_body' => $getQuestions_rec['question_body'], 
               'question_type' => $getQuestions_rec['type'], 
               'possible_answer1' => $getQuestions_rec['answer1'], 
               'possible_answer2' => $getQuestions_rec['answer2'], 
               'possible_answer3' => $getQuestions_rec['answer3'], 
               'possible_answer4' => $getQuestions_rec['answer4'], 
               'possible_answer5' => $getQuestions_rec['answer5'], 
               'possible_answer6' => $getQuestions_rec['answer6'], 
               'min_validation' => $getQuestions_rec['min_validation'], 
               'max_validation' => $getQuestions_rec['max_validation'] 
              ); 
       } 
       if(is_array($get_questions_array) && count($get_questions_array)>0) 
       { 
        foreach($get_questions_array as $key=>$array) 
        { 
         if($array === null) { 
          unset($get_questions_array[$key]); 
         } 
         $return['data']['questions'][] = $array; 
      } 
     } 
} 
else 
//error 

Возврат, например; будет выглядеть так:

"question_id":"3", 
"related_form_id":"4", 
"question_body":"Do you like this content?", 
"question_type":"radio", 
"possible_answer1":"Disagree", 
"possible_answer2":"Neutral", 
"possible_answer3":"Agree", 
"possible_answer4":null, 
"possible_answer5":null, 
"possible_answer6":null, 
"min_validation":"1", 
"max_validation":"1" 

Я попытался снять ключ, используя пустой и isnull, но безрезультатно. Любая помощь будет оценена по достоинству.

+0

Если вы хотите сделать это после запроса, а затем использовать 'array_filter()'. –

+0

Вы пытаетесь удалить поля NULL (т. Е. Обычно возможные ответы) из возвращаемого вопроса? Похоже, вы просматриваете вопросы и проверяете весь возвращенный массив на нуль, вместо того, чтобы обходить поля по каждому вопросу и проверять каждое поле для нулевого. – Kickstart

ответ

2

Вы не испытывая значения внутри массива, вам необходимо:

foreach($get_questions_array as $array){ 
    foreach($array as $key=>$element){ 
      if($element===null) 
       unset($array[$key]); 
      } 
      $return['data']['questions'][] = $array; 
} 
+0

Это сработало отлично, спасибо. Я вижу проблему сейчас. – Veltu

0

Почему вы не запрашиваете данные, которые не содержат нулей, вместо того, чтобы удалять нули самостоятельно? пусть база данных сделать это для вас что-то вроде:

select * from table where possible_answer IS NOT NULL 
0

Попробуйте эту петлю через массив и установить их в нуль с ключа, если значение пустое

foreach($getQuestions_rec as $key => $value){ 
    if($value == ''){ 
     $getQuestions_rec[$key] = null; 
    } 
} 
0

Используйте IFNULL (ColumnName» ") для замены нулевых значений на пустую строку в SQL-запрос.

Пример: IFNULL (Ответ6, «»)

2

Я думаю, что возможно, вы зацикливаете свою вложенную структуру данных на неправильном уровне.

У вас есть этот $get_questions_array, каждый элемент которого является ассоциативным массивом, который поступает из одной строки в вашем результирующем наборе MySQL. Но ваш php-код перемещается по строкам набора результатов, а не по столбцам.

Я думаю, вы хотите что-то более подобное, с другим вложенным foreach.

if(is_array($get_questions_array) && count($get_questions_array)>0) 
{ 
    foreach($get_questions_array as $row) 
    { 
     foreach ($row AS $colname=>$colvalue) 
     { 
      if ($colvalue === null || $colvalue =='') 
      { 
       unset($row[$colname]); 
      } 
     } 
    } 
} 

Посмотрите, что происходит? Ваш код отбрасывал целые строки, которые были пустыми, но их не было, поэтому ничего не делалось.

Смежные вопросы