(PHP) Сортировка

oilkj
Дата: 20.09.2006 16:22:03
Глупый вопрос по сортировке в php !!!

у меня есть база товаров с первичным признаком типа этого :

+ товар1
+ товар2
- товар5
+ товар26
- товар17

необходимо

1. отсортировать товар по списку с признаком +
по типу :

товар1
товар2
товар26

2. отсортировать товар по списку с признаком -

товар5
товар17

3. вывести список товаров которые не повторяются в списке ( не имеют признаков редактирования + или -)

т.е.

+ товар1 - повторяется - удаляем
- товар3
+ товар2 - повторяется - удаляем
- товар1 - повторяется - удаляем
+ товар26
- товар2 - повторяется - удаляем
- товар8


список должен быть :

оставляем
товар3
товар26
товар8
Dmitri P.
Дата: 20.09.2006 16:48:47
Насколько я понял, речь идет не о сортировке, а о фильтрации, копать в сторону array_filter().
Robert Tappan Moris
Дата: 20.09.2006 17:55:30
Если можно привести задачу к положительным и отрицательным значениям то можно решить так:
<?php
// исходный список
$ar = array(
	'+товар1',
	'+товар2',
	'-товар5',
	'+товар26',
	'-товар17',
	'+товар5',
	'+товар15'
);

// вывод массива для последующего стравнения
print_r($ar);
echo "<br>\n";

// приведения задачи к числам
array_walk($ar,create_function('&$var','$var=(int)str_replace("товар","",$var);'));

// вспомогательные массивы
$p = array();	// положительные (мухи)
$o = array();	// отрицательные (котлеты)
$pi = array();	// индексы мух
$oi = array();	// индексы котлет

// отделение мух от котлет
for($i=0;$i<count($ar);$i++) {
	if ($ar[$i]>=0) {
		$pi[] = $i;
        $p[] = $ar[$i];
	} else {
		$oi[] = $i;
		$o[] = abs($ar[$i]);
	}
}

// обнуление исходного массива
$ar = array();

// сортировка мух
sort($p);
// сортировака котлет
sort($o);

// взаимо исключение элементов
$n = count($p);
for($i=0;$i<$n;$i++)
	if(is_int($del=array_search($p[$i],$o)))
		unset($p[$i],$pi[$i],$o[$del],$oi[$del]);

// расстановка мух на прежние места
foreach($p as $v) {
	$ar[array_shift($pi)]=$v;
}
// расстановка котлет на прежние места
foreach($o as $v) {
	$ar[array_shift($oi)]=-$v;
}

// сортировака массива по ключам (чтоб красивее было)
ksort($ar);

// уход от чисел
array_walk($ar,create_function('&$var','$var = "товар".abs($var);'));

// вывод
print_r($ar);
?>

Не берусь утверждать что это лучший вариант, но как я понял все условия тредстартера выполняются.
Гутманс
Дата: 20.09.2006 18:10:16
Robert Tappan Moris

Ну, вы блин даете и вас не заломало всё это городить! Респект!
Robert Tappan Moris
Дата: 20.09.2006 18:35:13
Гутманс
Robert Tappan Moris

Ну, вы блин даете и вас не заломало всё это городить! Респект!

Нет =)
Я люблю решать чужие задачки, особенно решение задачи не сводится только к поиску функции, которая больше всего подойдет.

P.S. сори за оффтоп
DocAl
Дата: 20.09.2006 18:38:05
Интересно, а для базы товаров у вас нет СУБД?)
Bubmazas
Дата: 21.09.2006 00:29:38
Если у Вас БД типа MSSQL или MySQL то почему бы не загдать всё черезь SQL??


<?php
mysql_connect("host", "login", "pass");
mysql_select_db("your_bd");

$res = mysql_query("SELECT x,x1,x2,x3 FROM table1 WHERE y=1 ORDER BY state DESC");

?>


Типа того что нить))