Сортировка по остаткам и ключевой фразе. Помогите пожалуйста

Winged-Horse

Новичок
Здравствуйте. Нуждаюсь в вашей помощи.

В моём скрипе производится GET запрос.
Данный запрос через API получает Array массив.

Мне нужно отсортировать вывод вначале чтобы отображались записи похожие на GET запрос, а потом все остальные по алфавиту запросы.

В данном примере GET запрос: "k20tt"

API сервер мне отвечает:
PHP:
Array (
 [0] => stdClass Object ( [id] => 3563 [article_code] => PK20R11)
 [1] => stdClass Object ( [id] => 3564 [article_code] => PK20R13)
 [2] => stdClass Object ( [id] => 3567 [article_code] => PK20TR11)
 [3] => stdClass Object ( [id] => 3593 [article_code] => K20TR11)
 [4] => stdClass Object ( [id] => 3912 [article_code] => PK20PR11)
 [5] => stdClass Object ( [id] => 5716 [article_code] => K20TNR )
 [6] => stdClass Object ( [id] => 11997 [article_code] => K20TXR )
 [7] => stdClass Object ( [id] => 19595 [article_code] => K20TT )
 [8] => stdClass Object ( [id] => 116450 [article_code] => K20BRS10 )
 [9] => stdClass Object ( [id] => 117132 [article_code] => K20TT#4 )
 [10] => stdClass Object ( [id] => 122114 [article_code] => IK20TT#4 )
 [11] => stdClass Object ( [id] => 122133 [article_code] => IK20TT )
)
Далее я сортирую его таким образом:

PHP:
function cmp($a, $b) {
        $search_code_txt = $_GET['search'];
        $a =  preg_replace ('/[a-z]*(?:'.$search_code_txt.')[a-z]*/si','', $a->article_code);
        $b =  preg_replace ('/[a-z]*(?:'.$search_code_txt.')[a-z]*/si','', $b->article_code);
        return strcasecmp($a, $b);
}
usort($objsearch, "cmp");
Результат сортировки получается следующим:
K20TT
IK20TT
K20TT
#4
IK20TT#4
K20BRS10
K20TNR
K20TR11
K20TXR
PK20PR11
PK20R11
PK20R13
PK20TR11
Дальше я подключаюсь к базе MySQL и в таблице ищу запись со значением K20TT, K20TXR и т.д. и вывожу количество на остатке. В результате у меня те свечки что в наличии разбросаны по всему списку и выглядит это так:
K20TT - под заказ
IK20TT - остаток 4 шт
K20TT
#4 - под заказ
IK20TT#4- под заказ
K20BRS10- под заказ
K20TNR- под заказ
K20TR11- остаток 4 шт
K20TXR- остаток 4 шт

PK20PR11- под заказ
PK20R11- под заказ
PK20R13- остаток 4 шт
PK20TR11- под заказ
А мне необходимо поднять те позиции что есть в наличии в верх списка. Как мне это сделать?
Мне нужно чтобы вывод был следующим образом:

IK20TT - остаток 4 шт
K20TR11- остаток 4 шт
K20TXR- остаток 4 шт
PK20R13- остаток 4 шт

K20TT - под заказ
K20TT#4 - под заказ
IK20TT#4- под заказ
K20BRS10- под заказ
K20TNR- под заказ
PK20PR11- под заказ
PK20R11- под заказ
PK20TR11- под заказ
 

Winged-Horse

Новичок
Единственное до чего додумался это вот такой вариант:
PHP:
function cmp($a, $b) {
        $search_code_txt = $_GET['search'];
        $a =  preg_replace ('/[a-z]*(?:'.$search_code_txt.')[a-z]*/si','', $a->article_code);
        $b =  preg_replace ('/[a-z]*(?:'.$search_code_txt.')[a-z]*/si','', $b->article_code);
        return strcasecmp($a, $b);
}
usort($objsearch, "cmp");

$i = 0;
while ($objsearch["$i"] != '') {
        $res_article = $objsearch["$i"]->article_code;

        //выполняет запрос в базу и выводит все необходимые значения. В данном примере нам понадобится значение deposit
        $sql_result = shopsql("$res_article");
        $result_deposit = $sqlshops['deposit'];

        if ($result_deposit >= '1') {
                $codes .= "$res_article - $result_deposit шт <br>";
        } else {
                $cod .= "$res_article - под заказ <br>";
        }
        $i++;
}

echo $codes.$cod;
Может кто-то может предложить какой-то более интересный вариант решения данной задачи?
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
или, может, никто не хочет читать эту простыню
 
Сверху