Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sortowanie tabeli po drugim wyrazie (nazwisko)
Forum PHP.pl > Forum > Przedszkole
Booster
Witam,
mam taki problem znalazłem gdzieś na internecie coś takiego
  1. function get_last_name($name) {
  2. return substr($name, strrpos($name, ' ') + 1);
  3. }
  4. function last_name_compare($a, $b) {
  5. return strcmp(get_last_name($a), get_last_name($b));
  6. }
  7.  
  8. function autorzy_lista() {
  9. usort($name, "last_name_compare");
  10. }
  11.  
  12. add_shortcode( 'autorzy_lista', 'autorzy_lista' );


Uruchamiam to shortcodem i wyświetla mi błąd

Warning: usort() expects parameter 1 to be array, null given in /home/public_html/wp-content/themes/segregacja/functions.php on line 894


Zbytnio się nie znam. gdy ustawiłem opcję sorotwania taką
  1. function contributors() {
  2. wp_list_authors('show_fullname=1&orderby=name&exclude_admin=1&exclude=');
  3. }
  4. add_shortcode( 'spis', 'contributors' );

która odwołuje się do tej
  1. function wp_list_authors( $args = '' ) {
  2. global $wpdb;
  3.  
  4. $defaults = array(
  5. 'orderby' => 'name', 'order' => 'ASC', 'number' => '',
  6. 'optioncount' => false, 'exclude_admin' => true,
  7. 'show_fullname' => false, 'hide_empty' => true,
  8. 'feed' => '', 'feed_image' => '', 'feed_type' => '', 'echo' => true,
  9. 'style' => 'list', 'html' => true, 'exclude' => '', 'include' => ''
  10. );


I wolał bym tej nie ruszać bo ona jest w silniku wp a zrobić nową tylko tamta wyświetla błąd :/ czy może mi ktoś pomóc albo nakierować ? ew może inne sortowanie
Turson
  1. function autorzy_lista() {
  2. usort($name, "last_name_compare");
  3. }

przekaż $name jako argument funkcji
Booster
Zbytnio nie rozumiem ... nie znam tyle php chodzi o cos takiego ?
  1. usort($name,array("last_name_compare"));

tylko że na tym nie działa
Turson
Ma być
  1. function autorzy_lista($name) {
  2. usort($name, "last_name_compare");
  3. }

albo użyjesz global
lukasz_os
Nie namawiaj do globali... Jak już pomagasz to rób to z głową. Potem się dziwisz że dostajesz kod spaghetti biggrin.gif
Turson
Namawiam do argumentu, a global jako gorsza alternatywa.
lukasz_os
Najlepiej o tym w ogóle nie wspominać
Booster
użyłem czegoś takiego
  1. function contributors() {
  2. global $wpdb;
  3. $authors = $wpdb->get_results("SELECT user_id from $wpdb->usermeta WHERE meta_key = 'last_name' ORDER BY meta_value");
  4. foreach ($authors as $author ) {
  5. $user = new WP_User($author->user_id);
  6. if ( '1' == $author->user_id ) {continue;}
  7. if ( '43' == $author->user_id ) {continue;}
  8. if ( '4' == $author->user_id ) {continue;}
  9. if ( '3' == $author->user_id ) {continue;}
  10. if ($user->has_cap('edit_published_posts'))
  11. {
  12. echo "<a href=\"".get_bloginfo('url')."/author/";
  13. the_author_meta('user_nicename', $author->user_id);
  14. echo "/\">";
  15. echo "<div class=\"author_info\">";
  16. the_author_meta('display_name', $author->user_id);
  17. echo "</div></a>, ";
  18. }
  19. }
  20.  
  21. }
  22. add_shortcode( 'spis', 'contributors' );

Wykluczyłem 4 użytkowników, lecz mam dwa problemy
1. nie segreguje polskich znaków daje je na koniec
2. przy ostatnim użytkowniku jest , zamiast . jak to mogę zmienić ?
lukasz_os
ad.1. Sprawdź jakie masz kodowanie w bazie danych. Bo sortujesz w niej więc pewnie tam masz jakiś dziwny collate.
ad.2 Nie wypisuj tego od razu za pomocą echo tylko wpakuj wszystkie linki w petli do tablicy (np $tablica_z_linkami). Potem na końcu zrób tak:
  1. echo implode(',',$tablica_z_linkami).".";
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.