За последние 24 часа нас посетили 17710 программистов и 1607 роботов. Сейчас ищет 1081 программист ...

Не до конца понимаю array_unique

Тема в разделе "PHP для новичков", создана пользователем tcp65, 20 май 2010.

  1. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    PHP:
    1.         for ($i=0; $i<=count($files); $i++)
    2.             {
    3.             print "$files[$i]-";
    4.             }
    5.  
    выдает: ---47--44-42-0-48---

    а
    PHP:
    1.         $files=array_unique($files);
    2.         for ($i=0; $i<=count($files); $i++)
    3.             {
    4.             print "$files[$i]-";
    5.             }
    6.  
    выдает: ---47--44-42-

    почему так?
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Что-то свежо предание, но верится с трудом.

    48 куда подевалось из последнего?

    Можно дамп исходного массива увидеть?
     
  3. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Значения приходят из формы.

    вот еще пример с тем же массивом
    PHP:
    1.         $files=preg_split("/-/", $mass[filesold]);
    2. print_r($files);
    3.  
    4.         $filesnew=$mass[files];
    5. print_r($filesnew);
    6.  
    7.         for ($i=0; $i<=count($filesnew); $i++)
    8.             {
    9.             $files[]=$filesnew[$i];
    10.             }
    11. print "<br>";
    12. print_r($files);
    13.  
    14. print "<br>";
    15. sort ($files);
    16. print_r($files);
    17. print "<br>";
    18. $result = array_unique($filesnew,SORT_LOCALE_STRING );
    19. print_r($result);
    вывод:
    PHP:
    1.  
    2. Array ( [0] => [1] => [2] => [3] => 47 [4] => ) Array ( [0] => 39 [1] => 0 [2] => 38 )
    3. Array ( [0] => [1] => [2] => [3] => 47 [4] => [5] => 39 [6] => 0 [7] => 38 [8] => )
    4. Array ( [0] => [1] => [2] => [3] => [4] => [5] => 0 [6] => 38 [7] => 39 [8] => 47 )
    5. Array ( [0] => 39 [1] => 0 [2] => 38 )
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    И в чем вопрос?
     
  5. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    первая строчка приходят элементы _ _ _ 47 _
    первая строчка второй массив приходят элементы 39 0 38
    вторая строчка я их объединяю в один массив _ _ _ 47 _ 39 0 38 _
    третья строчка сортинг _ _ _ _ _ 0 38 39 47

    далее сортюник должен убрать повторяющиеся элементы, т.е. по идеи должен остаться результат: _ 0 38 39 47

    почему остается: 39 0 38??????
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    По идее конечно должен, если делать его к тому, что надо. А не к левой пятке.

    Эм, а что мы выводим-то?

     
  7. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    не понял... :?
    Если вопрос в SORT_LOCALE_STRING то это я просто перебором пробовал всё, если написать
    PHP:
    1.  
    2. $result = array_unique($filesnew);
    3.  print_r($result);
    выводится то-же самое!

    Где я ошибся?
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    tcp65
    Куда вы складываете все значения двух массивов?
    А к какому применяете array_unique?

    И что вы ожидаете увидеть после этого?
     
  9. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Нашёл! Спасибо огромное заработало правильно.

    Можно еще вопрос по этому примеру?
    Откуда после объединения массивов появляется лишний пустой элемент?

    правильно будет в цикле убрать знак "равно"?
    for ($i=0; $i<count($filesnew); $i++)
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    0 и "" скорее всего


    Массивы можно сливать при помощи

    + и array_merge (работают они по-разному посмотрите что вам больше подходит)

    PHP:
    1. <?php
    2. // так
    3. $firstarray += $secondarray;
    4. // или так
    5. $firstarray = array_merge($firstarray, $secondarray);
    зависит от того, что нужно получить.
    Для полного обхода массива я бы пользовался foreach() поскольку ключи не всегда могут быть цифровыми и бывают нужны.
     
  11. tcp65

    tcp65 Активный пользователь

    С нами с:
    7 ноя 2007
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Россия, Москва
    Ок, буду разбираться! Спасибо за помощь!