Имя объекта в массиве вызывает изменение порядка

Со следующим кодом:

//turn items into an array
$item_array = array('abc','xyz2','Good','nice-b');

//implode items, turn into string
$item_implode = join("','", $item_array);

//declare an overall array for result
$product_items = array();

$productList = array();
$result = $mysqli->query("SELECT Name, WebsitePrice as price, WebsiteStock as stock from table_products where Name IN ('$item_implode')");

if ($result->num_rows > 0) {
$x = 1;
// output data of each row
while($row = $result->fetch_assoc()) {
$product_items[$x]["Name"] = $row['Name'];
$product_items[$x]["price"] = $row['price'];
$product_items[$x]["stock"] = $row['stock'];
$x = $x + 1;
}
} else {
echo "0 results";
}

Я получаю этот вывод:

abc- 99 - yes
xyz - 20 - yes
Good - 30 - yes
nice-b - 55 - yes

Но когда я использую предмет под названием Hello1 вместо Good, как это:

$item_array = array('abc','xyz2','Hello1','nice-b');

Я получаю этот вывод:

abc- 99 - yes
Hello1 - 77 - yes
xyz - 20 - yes
nice-b - 55 - yes

Это означает, что имя объекта вызывает некоторые изменения в порядке массива, и оно становится второй пункт, даже если это должно быть в третьих один.

Что вызывает это?

0

Решение

использование ORDER BY FIELD(Name, 'abc','xyz2','Good','nice-b'); в вашем запросе. Вы могли бы использовать $item_implode для повторного использования.

[Получено из комментариев]
1

Другие решения

В мире SQL порядок не является неотъемлемым свойством набора данных. Таким образом, вы не получаете от вашей СУБД гарантии того, что ваши данные будут возвращаться в определенном порядке — или даже в согласованном порядке — если вы не запросите свои данные с помощью предложения ORDER BY.

Нет никаких гарантий, что MySQL вернет результаты в том порядке, в котором вы установили идентификаторы в IN пункт.

Позже редактироватьНа основании вашего последнего комментария вы можете сделать что-то вроде этого:

if ($result->num_rows > 0) {
$product_items = array_flip($item_array);

// output data of each row
while($row = $result->fetch_assoc()) {
$product_items[$row['Name']] = array();

$product_items[$row['Name']]["Name"]  = $row['Name'];
$product_items[$row['Name']]["price"] = $row['price'];
$product_items[$row['Name']]["stock"] = $row['stock'];
}
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector