[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: торможу с функцией usort.
Lesandr
Народ, помогите ктонить. начал изучать php по учебнику - Лаура Томсон & Люк Беллинг, застрял на сортировке многомерных массивов unsure.gif , там приводится пример:

/*сам массив*/
$products = array( array( "TIR", "Tires", 100 ),
array( "OIL", "Oil", 10 ),
array( "SPK", "Spark Plugs", 4 ) ) ;

/*его сортировка*/
function compare($x, $y)
{
if ( $х[1] == $у[1] )
return 0;
else if ( $x[l] < $у[1] )
return -1;
else
return 1;
}
usort($products, compare);

Разъясните ПОЖАЛСТА чайнику, как вообще взаимодействуют элементы этой конструкции, принцып действия. Буду очень благодарен. smile.gif



Спустя 5 часов, 46 минут, 3 секунды (6.03.2010 - 14:48) Lesandr написал(а):
блин, что знатоков нету, или слишком гордые чтобы снизойти до ответа простому смертному. пожалуйста, кто нибуть, откликнитесь, подскажите менее опытному собрату. huh.gif

Спустя 4 часа, 3 минуты, 32 секунды (6.03.2010 - 18:52) olgatcpip написал(а):
а понять просто. попробуй после каждой строки вывести значения

Спустя 1 час, 38 минут, 39 секунд (6.03.2010 - 20:30) Lesandr написал(а):
для вывода я воспользовался циклом:

for($I=0;$I<count($products);$I++)
{
for($i=0;$i<count($products[1]);$i++)
{
print $products[$I][$i]." ";
}
print "<br>";
}

но браузер выводит этот массив неотсортированным. полный текст выглядит так:

<body>

<?php
function compare($x, $y)
{
if ( $х[1] == $у[1] )
return 0;
else if ( $x[1] < $у[1] )
return -1;
else
return 1;
}

$products = array( array( "TIR", "Tires", 100 ),
array( "OIL", "Oil", 10 ),
array( "SPK", "Spark Plugs", 4 ) ) ;

usort($products, "compare");

print count($products)." ".count($products[1])."<br><br>";

for($I=0;$I<count($products);$I++)
{
for($i=0;$i<count($products[1]);$i++)
{
print $products[$I][$i]." ";
}
print "<br>";
}

?>
</body>

именно поэтому я прошу объяснить взаимосвяз этих блоков с кодом. скорее всего я делаю что-то не так.


Спустя 11 часов, 39 минут, 36 секунд (7.03.2010 - 08:10) olgatcpip написал(а):
написать вывод после КАЖДОЙ строки
function compare($x, $y)
{
echo '<br><pre>--------------------------------<br/>';
echo '<br />X=';
print_r($x);
echo '<br/>Y=';print_r($y);
if ([1] ==[1] )
return 0;
else if ( $x[1] <[1] )
return -1;
else
return
1;
}

Спустя 12 минут, 26 секунд (7.03.2010 - 08:22) olgatcpip написал(а):
Но, если честно, в мануале куда проще пример и понятнее
function cmp($a, $b) 
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

while (list($key, $value) = each($a)) {
echo "$key: $value
";
}

Спустя 1 час, 14 минут, 56 секунд (7.03.2010 - 09:37) Lesandr написал(а):
Я вот тоже не пью, правда всего 22 года, 3 месяца, 24 дня, а догадаться без тебя бы не смог. СПАСИБО), мне кажется, что потихоньку начинаю понимать. буду дальше разбираться.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.