2010-11-23 3 views
1

У меня есть массив гиперссылок, создаваемых из объекта ab для отображения на странице. Текст ссылки - это все, что отображается на странице. Мне нужно отсортировать гиперссылки/текст ссылки в алфавитном порядке.PHP сортировать массив гиперссылок по тексту ссылки

Вот что у меня есть:

foreach ($value as $key1 => $value1) { 

     if ($key1 == 'id') { 

     $id = $value1; 

     } 

      if ($key1 == 'name') { 


       $link = '<a href="#" id="program_link_' . $id . '" class="program_link">' . $value1 . '</a><br>'; 
      array_push($stack, $link); 

     } 

}

asort($stack); 
print_r($stack); 

asort вызов на $ стеке не сортирует массив по тексту ссылки.

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

Любые идеи очень ценятся.

+0

Я бы создал второй массив и заполнил их значениями `strip_tags()` ed. Сортируйте это и используйте его ключи, чтобы отобразить правильный массив (не совсем тривиально, но я уверен, что для него есть функция массива) – 2010-11-23 23:35:06

ответ

1

По коду данного, текст ссылки является то, что в $value1. Таким образом, вы можете сортировать на основе этого.

Если предположить, что текст ссылки можно использовать в качестве ключа массива (не содержат недопустимые ключевые символы) Вы можете добавить их в массив, как, например: $links[$value1] = '<a href="#" id="program_link_' . $id . '" class="program_link">' . $value1 . '</a><br>';, а затем отсортировать их по ключевому ksort($links);

0

Off верхней части моей головы, что-то, как это должно работать:

$keys = asort(array_keys($stack)); 
$sorted = array(); 

foreach ($keys as $key) { 

    $sorted[$key] = $stack[$key]; 

} 
1

Я подозреваю, что id уникален. Поэтому сначала создайте хороший массив ключей/значений, а затем отсортируйте его. Затем заполнить стек с отсортированных гиперссылок

$links = array(); 
foreach ($value as $key1 => $value1) 
{ 
    if ($key1 == 'id') { 
     $id = $value1; 
    } 
    if ($key1 == 'name') { 
     $links[$id] = $value1; 
    } 
} 

asort($links); 
print_r($links); 

foreach($links as $id=>$name) 
{ 
    $link = '<a href="#" id="program_link_' . $id . '" class="program_link">' . $name. '</a><br>'; 
    array_push($stack, $link); 
} 
0

сортировки массива можно было бы сделать так:

array_sort($value, 'linkname', SORT_ASC) 

, а затем разобрать его в цикле Еогеасп. Более подробную информацию о сортировке массива из запроса по определенному ключу можно найти в php manual: sort