Помогите с массивом, плиз..

Artem_Paris

Новичок
Прошу прощения, если я пишу не в том форуме, просто не нашел подходящей ветки.

Есть массив:
PHP:
Array
(
    [DBL+EXBED] => 3558.8
    [DBL] => 3558.7
    [0-1] => 3558.9
    [SGL] => 3558.6
    [11-15] => 3558.11
    [12-18] => 3558.12
)
нужно отсортировать так, чтобы на выходе был порядок такой:
PHP:
Array
(
    [SGL] => 3558.6
    [DBL] => 3558.7
    [DBL+EXBED] => 3558.8

    ...и дальше все остальные, которых может быть любое количество...
)


Подсажите, что не так делаю..или может кто видит более легкий путь..
мой код:
PHP:
$array = array( 'DBL+EXBED' => '3558.8',
				'DBL' => '3558.7',
				'0-1' => '3558.9',
				'SGL' => '3558.6',
				'11-15' => '3558.11',
				'12-18' => '3558.12');
	
	print_r(aaa($array,2));
	
	
function aaa($fields,$type)
{
	if(is_array($fields))
	{
		foreach($fields as $name=>$key)
		{
			if($type == 2)
			{
				if($name == "SGL")
				{
					$arr[0][0] = array($name,$fields[$name]);
				}
				if($name == "DBL")
				{
					$arr[0][1] = array($name,$fields[$name]);
				}
				if($name == "DBL+EXBED")
				{
					$arr[0][2] = array($name,$fields[$name]);
				}
				else
				{
					$arr[0][] = array($name,$fields[$name]);
				}
				ksort($arr[0]);
				foreach($arr as $data)
				{
					foreach($data as $dat)
					{
						$new_arr[$dat[0]] = $dat[1];
					}
				}
			}
		}
		$new_arr = array_unique($new_arr);
	}
	return $new_arr;		
}
а выходит опять :
PHP:
Array
(
    [DBL] => 3558.7
    [DBL+EXBED] => 3558.8
    [0-1] => 3558.9
    [SGL] => 3558.6
    [12-18] => 3558.11
)
Подскажите, что не так делаю? ((
 

Semen

Семён
PHP:
$arr = array
(
    'DBL' => 3558.7,
    'DBL+EXBED' => 3558.8,
    '0-1' => 3558.9,
    'SGL' => 3558.6,
    '12-18' => 3558.11,
);
print_r($arr);
natsort($arr);
print_r($arr);
output
PHP:
Array
(
    [DBL] => 3558.7
    [DBL+EXBED] => 3558.8
    [0-1] => 3558.9
    [12-18] => 3558.11
    [SGL] => 3558.6
)
Array
(
    [SGL] => 3558.6
    [DBL] => 3558.7
    [DBL+EXBED] => 3558.8
    [0-1] => 3558.9
    [12-18] => 3558.11
)
 

С.

Продвинутый новичок
Semen, ты просто гений! Ну или по крайней мере был бы им, если бы не упустил, что сортировка здесь идет по ключу, а не по значнию.
 

С.

Продвинутый новичок
Я бы применил uksort(), где в пользовательской функции подменял:
SGL ==> -3,
DBL ==> -2,
DBL+EXBED ==> -1,
а для остальных ключей брал бы число слева. Ну и соответственно сравнивал бы эти значения.
 

С.

Продвинутый новичок
Нет, ты не гений. Ты гениальный тормоз.
 

Вурдалак

Продвинутый новичок
ТС хочет, наверное, чтобы ключи SGL, DBL, DBL+EXBED были всегда в начале вне зависимости от значений. В принципе, трактовать слова «нужно отсортировать так, чтобы на выходе был порядок такой» можно как угодно. «Порядок такой» — это не критерий. Если взять и отсортировать по возрастанию исходный массив, то в итоге получится тоже массив с ключами SGL, DBL, DBL+EXBED в начале.
 

С.

Продвинутый новичок
Обозначения SGL, DBL, DBL+EXBED (Single, Double, Double + Extra Bed) идут в логическом порядке. И дело не в моих эзотерических знаниях, Semen. Там в неуклюжем коде ТС'а видно по чему он сортирует.
 

Bardak

Новичок
Задачу можно сформулировать как - поставить элементы массива SGL, DBL, DBL+EXBED в начало?
Если да то зачем проходить весь массив? Может воспользоваться array_unshift() и unset()?
Или я что то не понимаю?
 

baev

‹°°¬•
Команда форума
Задачу можно сформулировать как - поставить элементы массива SGL, DBL, DBL+EXBED в начало?
Если да то зачем проходить весь массив? Может воспользоваться array_unshift() и unset()?
Или я что то не понимаю?
— код ТС-а посмотрите:
PHP:
ksort($arr[0]);
Можно предполагать, что остальные элементы надо отсортировать по ключу..
 

Artem_Paris

Новичок
C вопросом решено. Всем огромное спасибо.
Частично помогла функция natsort(), пришлось немного еще подкорректировать приходящие данные.
Пост можно закрывать.
 
Сверху