【问题标题】:Why is PHP saying that the value is not in the array when it is?为什么PHP说值不在数组中?
【发布时间】:2017-09-27 07:45:13
【问题描述】:

感谢您查看我的问题,我在 PHP 中开发了一个自定义函数来使用 Ajax,我基本上想知道一个值是否在数组中。

我正在检查 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();
}

我知道以上内容显然不是天才完成的,但它应该可以工作,不是吗?如果我能在这方面得到任何帮助,我将不胜感激。

【问题讨论】:

  • 他使用 ARRAY_N 作为参数,我相信它会产生一个数字数组,因此他使用 in_array 而不使用索引(我在这里猜测)
  • 你希望event_try在哪里?在ATT_IDEVT_ID 中?
  • @bub 它正在检查 EVT_ID
  • 那么您可以查看if(in_array($event_try, $reg['EVT_ID']))...
  • @bub 不起作用:/

标签: php arrays json ajax wordpress


【解决方案1】:

问题是get_results 不返回 arrays 的数组,它返回 objects 的数组。

你不能使用in_array 来检查对象,所以首先你需要把对象变成一个数组——你可以简单地通过强制转换来做到这一点,例如

    $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;

【讨论】:

  • 我将它作为带有 ARRAY_N 的 get_results 上的数字数组返回...尝试添加您的建议,但仍然返回“Ok”。我认为问题出在 die() 附近的最后一次 if-else 检查。不过感谢您的建议!
  • @DavidMendienta get_results 返回多少行?我以为它只会得到一个......
  • 与用户有关系,它是一对多关系,所以它可以返回许多行。对于这个特定的用户,有一行 EVT_ID 1004 这是我正在测试的值with... PHP 仍然返回它不在数组中。
  • 我自己测试了代码(显然使用不同的查询除外!)并且它运行良好。你有没有做过print_r($registration; 看看结果是否有任何异常?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 2016-10-19
  • 1970-01-01
  • 2013-02-09
  • 2014-07-16
  • 1970-01-01
  • 2022-11-22
相关资源
最近更新 更多