【问题标题】:in_array command does not workin_array 命令不起作用
【发布时间】:2014-03-16 07:25:08
【问题描述】:

in_array函数,由于某种原因,返回false;

这是我正在使用的代码:

$query = "SELECT users_invites.invite_user_id
          FROM users_invites
          JOIN users ON users.id = users_invites.user_id AND users_invites.user_id =". param('session_id')."
          ORDER BY users.id ASC";

$response = $this->_db->query($query)->result_array();

 foreach ($response as $key => $value)
 {
    if (!in_array($_REQUEST['invite_user_id'][$key],$response[$key]))
        $this->_db->insert("users_invites",array("user_id"=> param('session_id') , "invite_user_id"=>$_REQUEST['invite_user_id'][$key]));


 } 

in_array 函数不起作用,插入命令总是被执行。 有什么想法吗?

P.S:invite_user_id 是一个数组。 编辑:响应值为:

Array
(
    [0] => Array
        (
            [invite_user_id] => 20
        )

    [1] => Array
        (
            [invite_user_id] => 19
        )

    [2] => Array
        (
            [invite_user_id] => 3
        )

)

$_REQUEST['invite_user_id'] 值:

Array
(
    [0] => 3
    [1] => 4
)

【问题讨论】:

  • print_r($response);print_r($_REQUEST['invite_user_id']); = ?
  • 在 in_array 之前使用 var_dump 来查看你的变量中到底有什么。

标签: php insert exists


【解决方案1】:

鉴于您得到的结构,我会对数据执行 foreach 以将其分解为一组数组,其中包含从表中返回的所有 id。

从那里我将foreach $_REQUEST['invite_user_id'] 与新数组$ids 对比,这是一个示例:

$ids = array();
foreach ($response as $item)
{
   $ids[] = $item['invite_user_id'];
}

foreach ($_REQUEST['invite_user_id'] as $id) 
{
    if (!in_array($id, $ids))
    {
        echo "{$id} was not found...\n";
    }
    else
    {
        echo "{$id} was found...\n";
    }
}

And here is a live DEMO.

【讨论】:

    【解决方案2】:

    你的要求应该是这样的

    $query = "SELECT users_invites.invite_user_id
              FROM users_invites
              JOIN users ON users.id = users_invites.user_id AND users_invites.user_id =". param('session_id')."
              ORDER BY users.id ASC";
    
    $response = $this->_db->query($query)->result_array();
    
    $invite_user_id = array();
    
    
     foreach ($response as $key => $value)
     {
       $invite_user_id[] = $value;
     }
    
     foreach( $_REQUEST['invite_user_id'] AS $key => $value )
     {
          if ( !in_array( $value,$invite_user_id) )
          {
           $this->_db->insert("users_invites",array("user_id"=> param('session_id') , "invite_user_id"=> $value));
          }
     }
    

    【讨论】:

    • $_REQUEST['invite_user_id'][2] 将未定义
    • 现在尝试更新定义所有数组键的新变量
    • 我认为 OP 想知道 invite_user_id 是否在数组中。 array_keys 将只返回索引,它不代表要检查的正确数据。
    • 是的,是的,正确的,我更新了我的答案等等,我明白了
    • isset($_REQUEST[$key][$value]) 将始终为 true。而是使用isset($_REQUEST[$key])
    【解决方案3】:

    以下应该可以正常工作:

    $query = 'SELECT users_invites.invite_user_id
                FROM users_invites
                JOIN users ON users.id = users_invites.user_id AND
                     users_invites.user_id = ' . param('session_id') . '
            ORDER BY users.id ASC';
    $response = $this->_db->query($query)->result_array();
    
    $storedInvites = array();
    foreach ($response as $index => $data) {
        $storedInvites[] = $data['invite_user_id'];
    }
    
    foreach ($_REQUEST['invite_user_id'] as $index => $inviteUserId) {
        if (!in_array($inviteUserId, $storedInvites)) {
            $insertData =  array(
                'user_id' => param('session_id'),
                'invite_user_id' => $inviteUserId
            );
    
            $this->_db->insert('users_invites', $insertData);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2023-04-08
      • 2018-11-14
      相关资源
      最近更新 更多