2017-09-27 11 views
0

私の質問を見てくれてありがとう、私はAjaxで動作するようにPHPでカスタム関数を開発した、私は基本的に値が配列内にあるかどうかを知りたい。なぜPHPは値が配列の中にあるのではないと言っていますか?

event_tryがデータベースクエリの結果セットに含まれているかどうかを確認しています。この場合、1004は "$ reg"配列にあります(私は保証します)。その場合、最後のif-elseは "notok"を返すべきですが、Ajaxを使ってjsonを出力するときはいつも "ok"になります。

私はprint_rでテストを行い、 "notok"を返します。それは何らかの理由でjsonとajaxだけである。

は、ここでは、コードです:

function validate_event_no_repeat(){ 

    // header('Content-type: application/json'); 
    $check_repeat_result = 0; 
    $check_repeat = array(); 
    $event_try = 1004; 

    global $wpdb; 


    $current_user = wp_get_current_user(); 

    $get_attendee = $wpdb->get_results("SELECT ATT_ID FROM su_esp_attendee_meta WHERE ATT_email='" . $current_user->user_email . "'"); 



     foreach ($get_attendee as $atte): 
     $loggedID = $atte->ATT_ID; 

     $registration = $wpdb->get_results("SELECT ATT_ID, EVT_ID FROM su_esp_registration WHERE ATT_ID = $loggedID", ARRAY_N); 

     foreach ($registration as $reg): 
      if(in_array($event_try, $reg)): 
       $check_repeat[] = "notok"; 
      else: 
       $check_repeat[] = "ok"; 
      endif; 
     endforeach; 

     endforeach; 

     if(in_array("notok", $check_repeat)): 
     $check_repeat_result = "notok"; 
     else: 
     $check_repeat_result = "ok"; 
     endif; 

     echo json_encode(array('crr' => $check_repeat_result)); 

    die(); 
} 

私が知っている以上はは明らかに天才によって行われていないが、それはそれではないはず動作するはず?私はこれに得ることができるすべての助けに感謝します。

+0

彼は(私はここgussingよ)インデックスのないin_array''の故に彼の使用、私はそれが数値配列を生み出すと信じて、引数としてARRAY_Nを使用しています –

+0

? 'ATT_ID'または' EVT_ID'で? –

+0

@bub EVT_IDが –

答えて

0

問題はget_results配列の配列を返さないことがある、それはオブジェクトの配列を返します。

オブジェクトを確認するのにin_arrayを使用することはできません。オブジェクトを配列にする必要があります。オブジェクトを配列にする必要があります。あなたはevent_try`toが可能 `期待します

$registration = $wpdb->get_results("SELECT ATT_ID, EVT_ID FROM su_esp_registration WHERE ATT_ID = $loggedID", ARRAY_N); 

    foreach ($registration as $reg): 

     /* ADD THIS LINE: */ 
     $reg_array = (array) $reg; /* cast the object as an array */ 

     if(in_array($event_try, $reg_array)): 
      $check_repeat[] = "notok"; 
     else: 
      $check_repeat[] = "ok"; 
     endif; 
    endforeach; 
+0

を確認してください。 ARRAY_Nでget_resultsの配列に... "Ok"を返すが、あなたの提案を追加しようとしました。私は問題がdie()の近くの最後のif-elseチェックであると思う。しかし、提案をありがとう! –

+0

@DavidMendienta 'get_results'は何行返されますか?私はそれが1つしか得られないと仮定していました... – FluffyKitten

+0

ユーザーとの関係は多く、1対多の関係であるため、多くの行を返すことができます。この特定のユーザーにはEVT_ID 1004の行があります私はまだテストしていますが、PHPは配列にないことを返します。 –

関連する問題