Извините, но ваш код вообще не имеет смысла.Я удивлен, что вы получаете такой результат вообще.Давайте пройдемся по нему.
Где цитаты?
$array2[] = $itemz[place][id];
$array3[] = $itemz[place][location][city];
Вам не хватает цитат, пожалуйста, добавьте их
$array2[] = $itemz['place']['id'];
$array3[] = $itemz['place']['location']['city'];
Массив вПреобразование строки
$sql = "select * from places where id=".$array2." and location=".$array3."";
Этот оператор не должен работать по двум причинам.
Предполагая, что id
является одним полем INT, и у вас есть набор INT в $array2
, вы все равно не можете сравнить их без MySQL IN
.
Вы преобразовываете массив PHP в строку.Это не сработает.
Поскольку вы выполняете это в цикле, $array2[]
и $array3[]
продолжат изменяться и будут расти.
Итак, что вы на самом деле пытаетесь сделать, это придумать запрос типа
$sql = "SELECT *
FROM places
WHERE
id IN (" . implode(',', $array2) . ") AND
location IN (" . implode(',', $array3) . ")";
Но это не имеет никакого смысла вообще, потому что, поскольку цикл продолжается, вы извлекаете те же данныепостепенно.
Так что я думаю, что вы действительно хотите сделать это
$sql = "SELECT *
FROM places
WHERE
id = {$itemz['place']['id']} AND
location = {$itemz['place']['location']['city']}";
Это, скорее всего, то, что вам нужно.Это извлекает строки для каждой строки во время итерации по массиву.
Я бы сделал пару улучшений.
Выполните запрос один раз после выполнения цикла, так что вам нужно будет выполнить запрос только один раз, а не n
раз.
Кроме того, рассмотрите возможность получения только нужных столбцов вместо выполненияSELECT *