PHP foreach获取表值并进行更改

时间:2015-11-25 00:12:40

标签: php mysql wordpress

情况就是这样,我从WordPress插件数据库中获取数据。我需要抓住那些"产品"从数据库中,找到" name"值,从中删除一些字符,然后最后按" name"进行排序。长度。这是正在发生的事情

    //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。最重要的是,我需要在删除字符之前回显第二个循环中的名称。真正失去了如何完成这项工作。看似简单,因为产品通常按数字和字符排序,但不能正确排序。

1 个答案:

答案 0 :(得分: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

EDIT!错过了$ products实际上是一个对象数组的事实。您可以使用strnatcmp

使用其他技术
usort($products, function($a, $b) {
    return strnatcmp($a->name, $b->name);
});

请注意,如果您出于某种原因想要保留相同的密钥,请将其更改为uasort