2014-03-16 3 views
0

Функция in_array по какой-либо причине возвращает false;команда in_array не работает

Это код, я использую:

$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 функция dosen't работы и команда вставки всегда выполняется. Любая идея?

P.S: Invite_user_id - это массив. Edit: Значение ответ:

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 
) 
+1

'print_r ($ response); 'и' print_r ($ _ REQUEST ['invite_user_id']); '=? – Prix

+1

Используйте var_dump перед in_array, чтобы узнать, что именно находится в ваших переменных. –

ответ

1

Учитывая ваш полученный структуры, я бы сделал foreach по данным, чтобы разбить его на один набор массивов со всеми идентификаторами, возвращаемыми из ta BLE.

Оттуда я 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.

0

Ваш запрос должен быть как этот

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

Если нет в массиве .. –

+0

'$ _REQUEST ['invite_user_id'] [2]' будет undefined –

+0

попробуйте обновить определение новой переменной всех ключей массива – Jack

0

Последующий должен хорошо работать:

$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); 
    } 
} 
Смежные вопросы