За последние 24 часа нас посетили 18184 программиста и 1650 роботов. Сейчас ищут 1709 программистов ...

функция usort()

Тема в разделе "PHP для новичков", создана пользователем skv_79, 1 авг 2009.

  1. skv_79

    skv_79 Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    26
    Симпатии:
    0
    Здравствуйте, не понимаю механизма сравнивания многомерного массива созданной функцией priceCmp.

    Код (Text):
    1. <?php
    2. $products = array(
    3.         array( name=> "HAL 2000", price => 4500.5 ),
    4.         array( name => "Tricorder", price => 55.5 ),
    5.         array( name => "ORAC AI", price => 2200.5 ),
    6.         array( name => "Sonic Screwdriver", price => 22.5)
    7.         );
    8. function priceCmp ( $a, $b )
    9.     {
    10.     if ( $a[price] )
    11.         return 0;
    12.     if ( $a[price] < $b[price] )
    13.         return -1;
    14.     return 1;
    15.     }
    16. usort( $products, priceCmp );
    17. foreach( $products as $val )
    18.     print "$val[name]: $val[price]<br>\n";
    19. ?>
    Вот первый оператор if
    Код (Text):
    1. if ( $a[price] )
    2.         return 0;
    в книге написано, что он сравнивает два агрумента и возвращает 0 если они равны, не понимаю как он их сравнивает, я тут вообще не вижу массива $b. Объясните пожалуйста.
    Заранее спасибо.
     
  2. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    там ошибка. во-первых, в первом if, должно быть
    $a[price] == $b[price]

    а во-вторых - то, что в квадратных скобках надо брать в кавычки: $a['price']
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Проверяется, равно ли значение true (но не обязательно эквивалентно)
     
  4. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    PHP:
    1. function priceCmp( $a, $b)
    2. {
    3.     if ($a['price'] == $b['price'])
    4.         return 0;
    5.  
    6.     return ($a['price'] < $b['price']) ? -1 : 1;
    7. }
     
  5. skv_79

    skv_79 Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    26
    Симпатии:
    0
    Спасибо большое!
     
  6. skv_79

    skv_79 Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    26
    Симпатии:
    0
    TheShock
    Сорри за глупый вопрос, но почему нужно брать в кавычки то, что в квадратных скобках, у меня в учебнике не берется, и все вроде бы работает.
     
  7. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    http://www.php.net/manual/en/language.types.array.php
    начинается с
     
  8. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    skv_79, у тебя устаревший учебник. Добавь после первого <?php следующую строку и ты удивишься ;)
    PHP:
    1. <?php
    2.     error_reporting (E_ALL);
     
  9. skv_79

    skv_79 Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    26
    Симпатии:
    0
    Спасибо большое! Учебник и в правду старый очень)