PHP foreach获取表值和更改

PHP foreach获取表值和更改,php,mysql,wordpress,Php,Mysql,Wordpress,情况是这样的,我从WordPress插件数据库中获取数据。我需要从数据库中获取“products”,找到“name”值,从中删除一些字符,然后最后按“name”长度对其排序。这就是发生的事情 //The plug in queries the database $products = $product->getModelsNames($where="", $orderBy='order by name', $limit=null); //I added this

情况是这样的,我从WordPress插件数据库中获取数据。我需要从数据库中获取“products”,找到“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): ?> 
//插件查询数据库
$products=$product->getModelsNames($where=“”,$orderBy='orderbyname',$limit=null);
//我添加这个是为了接受该查询并对“name”字段进行更改
foreach(产品为$p){
//我需要删除的字符
$characters=数组(“a”、“b”、“c”、“d”、“-”);
$p->name=str\u replace($characters,“,$p->name);
//现在按名称重新排序,不带字符,并保存回$products。不确定在此执行什么操作
}
//现在开始产品的循环

主要问题是我的产品名称如下:
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-A
8.2-1、8.2-2、8.2-10、8.2-2-A
。最重要的是,我需要在第二个循环中回显名称,就像我删除字符之前一样。我真的不知道该怎么做。似乎很简单,因为产品通常按数字和字符排列,但无法正确排序

您所寻找的是所谓的自然排序:

编辑!忽略了$products实际上是一个对象数组的事实。您可以使用以下不同的技术:


请注意,如果出于某种原因希望保留相同的密钥,只需将其改为
uasort

这对我来说没有任何输出。我是否必须
natsort($products)按名称?啊,我没有注意到$products不仅仅是一个名称数组。我会更新我的答案。。。
$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
usort($products, function($a, $b) {
    return strnatcmp($a->name, $b->name);
});