Сортировка на PHP

harpic

Guest
Сортировка на PHP

Помогите кто-нибудь с сортировкой на PHP вот в таком примере:
PHP:
$file = file("file.php");
$rows = count($file);
for ($row = "0"; $row < $rows; $row++) {
$code = explode("|", $file[$row]);
$number = $code[0];
$data = $code[1];
echo "$number | $data";
}
По сути этот код открывает файл file.php и выводит из него строки, после чего разделяет их на переменные при помощи explode(). Мне нужно тоже самое, только чтобы шла сортировка по номерам (переменная $numbers) в порядке убывания. Я уже всё перепробовал и не нашёл ничего ни в книгах о PHP, ни в Интернете. Если кто знает, помогите! Заранее спасибо!:)
 

Gas

может по одной?
сначала полностью формируешь масссив
PHP:
$code = array();
for ($row = "0"; $row < $rows; $row++) {
  $code[] = explode("|", $file[$row]);
}
потом [m]usort[/m]($code, 'cmp_function'), где cmp_function надеюсь напишешь сам
 

harpic

Guest
Вот я частично нашёл выход:
PHP:
<?
$file = file("file.php");
$rows = count($file);
for ($row = "0"; $row < $rows; $row++) {
$code = explode("^", $file[$row]);
$number = $code[0];
$text = $code[1];
$sort[$row] = array($number, $text);
}
rsort($sort);
foreach($sort as $data) {
$number = $data[0];
$text = $data[1];
echo "$number $text<br>";
}
?>
Однако в этом примере идёт сортировка по всему массиву, а мне необходимо сортировать данные не по всему массиву, а по любой переменной из него (например по номерам - переменная $number). Как это сделать?
 

leхus

Guest
Автор оригинала: Gas
[m]сначала полностью формируешь масссив

$code = array();
for ($row = "0"; $row < $rows; $row++) {
$code[] = explode("|", $file[$row]);
}

потом usort($code, 'cmp_function'), где cmp_function надеюсь напишешь сам[/m]?
Правильно же сказали, не нравиться как работает rsort напиши свой обработчик и запусти его в usort.(как грица функция, которую напасал сам всегда лучше для твоего случая) Сделать нетрудно.
 

Markus®

Guest
harpic
PHP:
<?php

  $file = file("base.txt");
  for($i=0;$i<count($file);$i++){
      list($arr['number'],$arr['text']) = explode("|",trim($file[$i]));
      $new_arr[$i] = $arr;
  }
  usort($new_arr, "sort_by_number");
  foreach ($new_arr as $id => $value){
           echo $value['number']." ".$value['text']."<br>";
  }

  function sort_by_number($a, $b)
  {
           if ($a['number'] == $b['number']) {
               return 0;
           }
           return ($a['number'] < $b['number']) ? -1 : 1;
  }
?>
 
Сверху