数组中对象的名称会导致顺序更改

时间:2016-01-04 11:13:41

标签: php arrays sorting dynamic-arrays

使用以下代码:

//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

意味着对象的名称会导致数组顺序发生一些变化,并且它变为 第二个 项,即使它应该是 第三个​​ 一个。

造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分:1)

在查询中使用ORDER BY FIELD(Name, 'abc','xyz2','Good','nice-b');。您可以使用$item_implode来重复使用。

[摘自评论]

答案 1 :(得分:0)

  

在SQL世界中,顺序不是一组数据的固有属性。因此,除非您使用ORDER BY子句查询数据,否则您的RDBMS无法保证您的数据将以特定顺序返回 - 或者甚至以一致的顺序返回 - 除非您使用ORDER BY子句查询数据。

无法保证MySQL会按照您在IN子句中设置ID的顺序返回结果。

稍后修改:根据您的上一条评论,您可以执行以下操作:

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'];
    }
}