Перейти к содержимому


Партнерская программа Kredov

Сортировка многомерного ассоциативного массива

#1 T(h)rasher

T(h)rasher
  • Пользователь
  • 22 сообщений
  • Репутация: 1
0

Отправлено 15 Июнь 2014 - 15:06

Всем добрый вечер. Есть такой многомерный ассоциативный массив:





$arrn = Array(
		'Microsoft'  => array( 'products'=> 3, 'rating'=> 5, 'mark'=>3),
		'IBM' => array( 'products'=> 2, 'rating'=> 3, 'mark'=>1),
		'HP'  => array( 'products'=>4, 'rating'=> 6, 'mark'=>1),
		'Sony' => array( 'products'=> 5, 'rating'=> 2, 'mark'=>5)
		);

Я пытаюсь отсортировать его по возрастанию значений элемента 'mark'. Т.е., чтобы получилось так:





'IBM' => array( 'products'=> 2, 'rating'=> 3, 'mark'=>1),
'HP'  => array( 'products'=>4, 'rating'=> 6, 'mark'=>1),
'Microsoft'  => array( 'products'=> 3, 'rating'=> 5, 'mark'=>3),
'Sony' => array( 'products'=> 5, 'rating'=> 2, 'mark'=>5)

Написал свою маленькую функцию сортировки и использую ее как параметр функции uasort():





function arrsort($x, $y)
 {
 if (isset($x['mark']) &&  isset($y['mark'])){
 
   	if ( $х['mark'] == $у['mark'] )
		return 0;
	else if ( $x['mark'] < $у['mark'] )
		return -1;
	else
		return 1;        
  } 
}

if (isset($x) &&  isset($y)){
uasort($arrn, "arrsort");
}

Но никакой сортировки в итоге почему-то не получается. В результате моего кода получается или такой массив:





'Microsoft'  => array( 'products'=> 3, 'rating'=> 5, 'mark'=>3),
'IBM' => array( 'products'=> 2, 'rating'=> 3, 'mark'=>1),
'HP'  => array( 'products'=>4, 'rating'=> 6, 'mark'=>1),
'Sony' => array( 'products'=> 5, 'rating'=> 2, 'mark'=>5)

или такой: 





'Sony' => array( 'products'=> 5, 'rating'=> 2, 'mark'=>5),
'IBM' => array( 'products'=> 2, 'rating'=> 3, 'mark'=>1),
'HP'  => array( 'products'=>4, 'rating'=> 6, 'mark'=>1),
'Microsoft'  => array( 'products'=> 3, 'rating'=> 5, 'mark'=>3)

Подскажите, что я делаю не так.


 

 

Сообщение отредактировал T(h)rasher: 15 Июнь 2014 - 17:05

  • 0

#2 sakhseo

sakhseo
  • Пользователь
  • 13 сообщений
  • Репутация: 1

Отправлено 15 Июнь 2014 - 20:25

function arrsort($x, $y){
  if (isset($x['mark']) &&  isset($y['mark'])){
    if ( $Х['mark'] == $У['mark'] )
      return 0;
    else if ( $x['mark'] < $У['mark'] )
      return -1;
    else
      return 1;        
  } 
}

Слетело то что я пытался выделить жирным и красным. Выделил прописными))))

В общем $x у тебя не везде $x))) Тоже самое с $y))))

Если поправить, то получается в итоге

Array(
    [HP] => Array(
            [products] => 4
            [rating] => 6
            [mark] => 1
        )
    [IBM] => Array(
            [products] => 2
            [rating] => 3
            [mark] => 1
        )
    [Microsoft] => Array(
            [products] => 3
            [rating] => 5
            [mark] => 3
        )
    [Sony] => Array(
            [products] => 5
            [rating] => 2
            [mark] => 5
        )
)

Сообщение отредактировал sakhseo: 15 Июнь 2014 - 20:33

  • 0

#3 T(h)rasher

T(h)rasher
    Topic Starter
  • Пользователь
  • 22 сообщений
  • Репутация: 1

Отправлено 15 Июнь 2014 - 20:54

Ого, спасибо огромное, заработало!) Мне не пришло в голову проверить имена сравниваемых массивов.


  • 0


Оформление форума – IPBSkins.ru