按数字顺序对变量内容进行排序


Sort variable contents in numeric order

我有一个变量:

$data = "Article 4 Article 2 Article 10";

我需要这个输出:

Article 2 Article 4 Article 10

我试过这样的东西:

<?php
$data = "Article 4 Article 2 Article 10";
function sort_titles_article_numbers($a,$b) {
    $akey = $a->$data;
    if (preg_match('/^Article ('d+)'. /', $akey, $matches)) {
        $akey = $matches[1];
    }
    $bkey = $b->$data;
    if (preg_match('/^Article ('d+)'. /', $bkey, $matches)) {
        $bkey = $matches[1];
    }
    if ($akey == $bkey) {
        return 0;
    }
    return ($akey < $bkey) ? -1 : 1;
}
uasort($data,'sort_titles_article_numbers');
echo $data;
?>

但有些不对劲。uasort似乎只适用于数组,但如何在变量内部对其进行排序?

$data = "Article 4 Article 2 Article 10";
// line below splits string by number, keeping it, and trims elements of array
$tmp = array_map('trim', preg_split('/'d+'K/', $data));
natsort($tmp); // very useful function for 'natural' sorting
echo join(' ', $tmp);  // converts array to string

结果-Article 2 Article 4 Article 10

如果您只想优先考虑数字,我找到了一种更好的方法来对数组进行数字排序:

$data = "Artihcle 4 Artizcle 2 Article 10";
$tmp = preg_split('/'w 'd+'K/', $data);

usort($tmp, function ($a, $b) {
    preg_match('/'d+$/', $a, $matchA);
    preg_match('/'d+$/', $b, $matchB);
    return $matchA[0] - $matchB[0];
});

$data2 = join(' ', $tmp);
echo trim($data2);