PHP Foreach显示相同的值


PHP Foreach display with same value

当我从不同供应商订购5个产品时,如何按$vendorid显示数据组。

例如:随机添加产品到购物车。

| $vendorid | $product_name |
-----------------------------
|     1     |    TEST31     |
|     4     |    TEST21     |
|     3     |    TEST20     |
|     3     |    TEST17     |
|     4     |    TEST11     |

但我想这样显示:

| $vendorid | $product_name |
-----------------------------
|     1     |    TEST31     |
|     3     |    TEST20     |
|     3     |    TEST17     |
|     4     |    TEST21     |
|     4     |    TEST11     |

代码:

foreach($_SESSION["products"] as $product){
    $product_name = $product["p_name"];
    $vendorid = $product["p_member_id"];        
    $cart_box = "<li>$vendorid $product_name</li>";
}
echo $cart_box;

这给了我一个输出,与我添加到购物车的结果相同:

| $vendorid | $product_name |
-----------------------------
|     1     |    TEST31     |
|     4     |    TEST21     |
|     3     |    TEST20     |
|     3     |    TEST17     |
|     4     |    TEST11     |
<?php
// sample data
$_SESSION["products"] = [];
$_SESSION["products"][] = ['vendorid'=>1, 'product_name'=>'TEST31' ];
$_SESSION["products"][] = ['vendorid'=>4, 'product_name'=>'TEST21' ];
$_SESSION["products"][] = ['vendorid'=>3, 'product_name'=>'TEST20' ];
$_SESSION["products"][] = ['vendorid'=>3, 'product_name'=>'TEST17' ];
$_SESSION["products"][] = ['vendorid'=>4, 'product_name'=>'TEST11' ];
// actual code
usort($_SESSION["products"], function($a, $b) {
    return $a['vendorid'] - $b['vendorid'];
});
foreach( $_SESSION["products"] as $product ) {
    echo '<li>',
        htmlspecialchars($product['vendorid']), ' ', htmlspecialchars($product['product_name']),
    "</li>'r'n";
}

打印

<li>1 TEST31</li>
<li>3 TEST17</li>
<li>3 TEST20</li>
<li>4 TEST11</li>
<li>4 TEST21</li>

在何时何地对$_SESSION["products"]数组进行排序并不重要
但是,如果你每次添加新项目时都这样做,你就不必每次显示购物车时都这么做,如果(以及当)php获得一些"排序插入数组"函数,你可以用它来替换代码,并节省一些计算时间。。。。

另请参阅:http://docs.php.net/manual/en/function.usort.php

尝试以下功能,它将在中工作

function aasort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
    $sorter[$ii]=$va[$key];
}
asort($sorter);
foreach ($sorter as $ii => $va) {
    $ret[$ii]=$array[$ii];
}
$array=$ret;

}

aasort($_SESSION["products"],"p_member_id");

在查询中使用ORDER BY到在查询中升序。

例如:

ORDER BY ID ASC;