2013-07-01 1 views
1

Я хочу хранить следующие фрагменты информации в структуре или массиве некоторого рода в PHP;Какая структура данных PHP подходит для хранения веб-ссылок и описаний и т. Д.?

  • URL
  • Название
  • Описание
  • Ранг

Я хочу, чтобы данные ассоциативными, что конкретный URL относится к заголовок, описание & Rank.

Я хочу, чтобы иметь возможность сортировать данные по рангу, а затем эхо в этом порядке, причем каждый элемент все еще связан.

Должен ли я использовать ассоциативные массивы? Структуры? Или какая-то другая структура данных PHP?

Thanks

ответ

0
$urls["http://example.com"] = array(
    "rank" => 3, 
    "title" => "abc", 
    ... 
) 

и использовать uasort для заказа

+0

Спасибо, какой тип структуры данных является тем, что я могу google и исследовать его дальше, ассоциативный массив? –

+0

PHP-массивы - это упорядоченные хэш-таблицы. Проверьте документы PHP по адресу http://www.php.net/manual/en/language.types.array.php – amartynov

+0

Это здорово, спасибо. Я смогу сортировать их тогда по «рангам» и использовать цикл foreach для эха их в том порядке, который я принимаю? Теперь я буду читать на ассоциативных массивах PHP, спасибо! –

0

Я бы создал для этого специальный класс. Для получения дополнительной информации о php-классах посетите php.net manual.

+0

В чем смысл введения классов в этом случае? Задача - хранить и перемещать данные. – amartynov

+0

Я могу использовать класс, если нужно, я бы пошел с ассоциативными массивами, если они отвечают моим требованиям. –

0

Вы можете попробовать:

$data = new LinkData(); 

$data->set("http://stackoverflow.com/q/17406624/1226894", [ 
     "name" => "Data Structure", 
     "rank" => 3 
]); 

$data->set("http://stackoverflow.com/", [ 
     "desc" => "Nice Site", 
     "title" => "Stackoverflow" 
]); 

foreach($data as $v) { 
    print_r($v); 
} 

Выход

Array 
(
    [url] => http://stackoverflow.com/q/17406624/1226894 
    [title] => 
    [rank] => 3 
    [desc] => 
    [name] => Data Structure 
) 
Array 
(
    [url] => http://stackoverflow.com/ 
    [title] => Stackoverflow 
    [rank] => 
    [desc] => Nice Site 
) 

Класс Б

class LinkData implements IteratorAggregate { 
    private $data = array(); 

    function getIterator() { 
     return new ArrayIterator($this->data); 
    } 

    function set($url, array $info) { 
     $this->data[md5($url)] = array_merge([ 
       "url" => $url, 
       "title" => null, 
       "rank" => null, 
       "desc" => null 
     ], $info); 
    } 

    function get($url) { 
     return isset($this->data[$key = md5($url)]) ? $this->data[$key] : []; 
    } 
} 
+0

действительно чрезмерно сложный ООП для простой задачи обработки данных :) – amartynov

+0

@amartynov .. Просветите меня, что сложнее? ? URL-адрес может быть до тех пор, пока 2048 ... используя это, поскольку такие ключи, как ваши примеры, не имеют смысла, и вам нужно проверить проблему с производительностью ... в любом случае .. я ничего не знаю – Baba

+0

классы, итератор и вычисление MD5 (кстати, вы переопределить хэш-таблицу, но не предотвращать столкновения). Поскольку из вопроса мы ничего не знаем о длинах URL-адресов и требованиях к производительности, я бы предпочел сохранить его простым. – amartynov