2015-11-25 67 views
0

這裏是情況,我從WordPress插件數據庫獲取數據。我需要從數據庫中獲取「產品」,找到「名稱」值,從中刪除一些字符,然後按「名稱」長度對其進行排序。這是怎麼回事PHP foreach獲取表值並更改

//The plug in queries the database 
    $products = $product->getModelsNames($where="", $orderBy='order by name', $limit=null); 

    //I added this to take that query and make changes to the 'name' field 
    foreach ($products as $p) { 

     //Characters I need removed 
     $characters = array("a", "b", "c", "d", ".", "-"); 
     $p->name = str_replace($characters, "", $p->name); 

     //Re sort by name now without characters and save back to $products. not sure what to do here 
    } 

    //now start the loop for the products 
    <?php foreach($products as $p): ?> 

主要的問題是我有產品名稱類似:8.2-1, 8.2-2, 8.2-2-A, 8.2-10等等,我不能讓他們進行排序的權利。我想唯一的辦法是刪除所有字符,只是有數字,然後按長度排序,否則我得到我的產品列表如8.2-1, 8.2-10, 8.2-2, 8.2-2-A8.2-1, 8.2-2, 8.2-10, 8.2-2-A。最重要的是,我需要在第二個循環中回顯名稱,就像在刪除字符之前一樣。在如何完成這項工作的真正損失。由於產品經常按數字和字符排列,但無法正確排序,看起來很簡單。

回答

2

你在找什麼叫做自然排序。 PHP has a function for this

$products = array(
    '8.2-10', 
    '8.2-2', 
    '8.2-1', 
    '8.2-2-A' 
); 
natsort($products); 
foreach ($products as $product) { 
    echo $product . "<BR>"; 
} 

輸出:

8.2-1 
8.2-2 
8.2-2-A 
8.2-10 

編輯!錯過了$ products實際上是一組對象的事實。您可以使用使用strnatcmp不同的技術:

usort($products, function($a, $b) { 
    return strnatcmp($a->name, $b->name); 
}); 

需要注意的是,如果你想保持相同的密鑰由於某種原因,只是將其更改爲uasort代替。

+0

這不會爲我輸出任何東西。我是否需要'natsort($ products);'以名字命名? – Packy

+0

啊,我沒注意到$產品不僅僅是一系列的名字。我會更新我的答案... – rjdown

+0

完美!我一直在努力研究數小時。謝謝! – Packy