Команда in_array не работает
Функция 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 не работает, и команда вставки всегда выполняется. Любая идея?
PS: инвайт_пользователя - это массив.Изменить: Значение ответа:
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
)
3 ответа
Решение
Учитывая вашу полученную структуру, я бы сделал foreach
на данных, чтобы разбить его на один набор массивов со всеми идентификаторами, возвращенными из таблицы.
Оттуда я бы 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";
}
}
Ваш запрос должен быть таким
$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));
}
}
Следующее должно работать хорошо:
$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);
}
}