Сортировка многомерного массива по заданому ключу

AHTIXPICT

Новичок
Сортировка многомерного массива по заданому ключу

Есть код
PHP:
<?php
function cmp($a, $b)
{
  if (isset($_GET['key'])) $key = $_GET['key']; else $key = "name";
  return strcmp($a[$key], $b[$key]);
}

$fruits[0]["fruit"] = "granates";
$fruits[0]["name"] = "33333333333";
$fruits[1]["fruit"] = "apples";
$fruits[1]["name"] = "11111111111";
$fruits[2]["fruit"] = "lemons";
$fruits[2]["name"] = "22222222222";

echo "<pre>";
print_r($fruits);
usort($fruits, "cmp");
echo "<hr>";
print_r($fruits);
echo "<pre>";
?>
Вопрос как можно переменную $key передавать не через глобальную переменную $_GET
а через переменую ф-ии cmp
Типа cmp($a, $b, $key)
 

Wicked

Новичок
используя в качестве callback'а метод объекта, в котором будет храниться имя этого поля, а не обычную функцию.
 

AHTIXPICT

Новичок
Wicked
Ничего не понял из того что ты посоветовал.
Можно подробнее
 

Wicked

Новичок
http://www.php.net/manual/en/language.pseudo-types.php

читаем про callback'и и думаем, как тут можно использовать что-то типа:

$obj = new Sorter();
$obj->field = 'fruit';
usort($fruits, array($obj, 'cmp'));

Ессно реализация класса Sorter - твоя задача.
 

WP

^_^
Он казал шоб ты клас сделал и от него сбацал объект, т.е.
PHP:
class mysort
{
 var $key;
 function mysort($key) {$this->key = $key;}
 function callback($a,$b) {return strcmp($a[$this->key],$b[$this->key]);}
}
$fruits = array(
array('name' => 'orange'),
array('name' => 'apple'),
array('name' => 'banana')
);
$sort = new mysort(isset($_GET['key'])?$_GET['key']:'name');
usort($fruits,array($sort,'callback'));
var_dump($fruits);
/*
array(3) {
  [0]=>
  array(1) {
    ["name"]=>
    string(5) "apple"
  }
  [1]=>
  array(1) {
    ["name"]=>
    string(6) "banana"
  }
  [2]=>
  array(1) {
    ["name"]=>
    string(6) "orange"
  }
}
*/
Вдогонку вот как вариант:
PHP:
$sort = isset($_GET['key'])?$_GET['key']:'name';
usort($fruits,create_function('$a,$b','return strnatcmp($a[\''.addslashes($sort).'\'], $b[\''.addslashes($sort).'\']);'));
-~{}~ 30.05.06 18:32:

опоздал :D
 
Сверху