За последние 24 часа нас посетили 34848 программистов и 1752 робота. Сейчас ищут 879 программистов ...

одинаковые эл-ты массива

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

  1. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    ох если дадите мне ответ какой я предполагаю , то я ужасно буду сквернословить :<

    Вопрос: есть массив , в нём повторяющиеся эл-ты , нужно их вывести
     
  2. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    array_intersect()
     
  3. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
  4. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    спасибо , на это я и расчитывал
    как я только не гуглил капец извините
    http://www.google.ru/search?hl=ru&lr=la ... 2&gs_rfai=
    супир алгоритмы
    паника
    Apple , спасибо
     
  5. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    siiXth
    Apple
    Gromo
    Эээ... вы чего? :)
    array_count_values(), потом поиск в нем значений (frequency) > 1.
     
  6. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    спасииибо

    PHP:
    1. <?
    2. $num="12 1 50 37 7 11
    3. 31 51 4 48 10 12
    4. 16 40 33 3 49 36";
    5.  
    6. $num=explode("\n",$num);
    7.  while($i<1000){
    8.  $i++;
    9.  $num[$i]=explode(" ",$num[$i]);
    10.  $num[$i]=sort($num[$i]);
    11.  }
    12.  
    13.  echo $num[2][2];
    14. ?>
    должно было вывестись
    3 16 33 36 40 49
    вывелось просто цифра 1 , всё это из-за sort

    если без sort , то например echo $num[2][4]; выведет 49
     
  7. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    siiXth
    ...=sort(...)

    :/

    sort() не возвращает результата.

    Тебе чего надо-то?
     
  8. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    PHP:
    1. $arr = array("2", "1", "4", "3","5");
    2.    sort($arr);
    3.    
    4.       echo $arr[1];# выведет 2
    это и надо

    тоесть по моему примеру

    PHP:
    1. <?
    2.  $num="12 1 50 37 7 11
    3. 31 51 4 48 10 12
    4. 16 40 33 3 49 36";
    5.  
    6.  $num=explode("\n",$num);
    7.   while($i<1000){
    8.   $i++;
    9.   $num[$i]=explode(" ",$num[$i]);
    10.   $num[$i]=sort($num[$i]);
    11.   }
    12.  
    13.   echo $num[2][2];
    14.  ?>
    подробнее
    PHP:
    1. $num=explode("\n",$num);
    получаем массив и в нём первое значение
    будет

    PHP:
    1. 12 1 50 37 7 11
    дальше
    PHP:
    1. $num[$i]=explode(" ",$num[$i]);
    получаем массив в массиве
    тоесть типа (следуем первому шагу цикла)
    PHP:
    1. $num[0]=array("12", "1", "50", "37", "7", "11");
    дальше делаем
    PHP:
    1. $num[$i]=sort($num[$i]);
    тоесть массив $num[0] в котором есть другой массив сортируем и должны получить
    дальше хочу например вывести цифру 7 из этого уже отсортированного массива
    PHP:
    1. echo $num[0][1];
    но вообще ничего не выводится

    если из этого плана мы уберём
    PHP:
    1. $num[$i]=sort($num[$i]);
    то при выводе
    PHP:
    1. echo $num[0][2];
    успешно получим цифру 50

    и вот я интересуюсь в чём причина того что после сорта ничего не выводится =)
     
  9. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    siiXth
    PHP:
    1. <?php
    2.  
    3. // Преобразуем все числа в массив
    4. $numbers = preg_split('/[ \r\n]+/s', $numbers);
    5.  
    6. ?>
    Надежней манипуляций с explode
     
  10. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    та с explode у меня всё работает
    тупо сортировка тварь :D
     
  11. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    siiXth
    sort не возвращает отсортированный массив, а берет его по ссылке и изменяет существующий.
     
  12. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1. <?php
    2.  
    3. $numbers = "12 1 50 37 7 11
    4.  31 51 4 48 10 12
    5.  16 40 33 3 49 36";
    6.  
    7. $numbers = preg_split('/[ \r\n]+/s', $numbers);
    8.  
    9. // Сортировка
    10. sort($numbers);
    11.  
    12. // Смотрим-с
    13. echo '<pre>' . print_r($numbers, true) . '</pre>';
    14.  
    15. ?>
     
  13. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    ну блин
    я ему даю МАССИВ $num[0] который нужно изменить , да , а он нехочет
     
  14. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Он не не хочет.
    Код (Text):
    1. $array = sort($array);
    Сначала происходит сортировка массива $array, после чего массиву $array присваивается триггер результата сортировки - т.е true/false, и $array переходит в булев тип. Ты переопределяет массив - sort НЕ ВОЗВРАЩАЕТ МАССИВ, он возвращает успешность сортировки, т.е bool
     
  15. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    вот это я и не знал

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

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    всё , сделал двумя массивами как и хотел =)

    PHP:
    1. <?
    2. $num=explode("\n",$num);
    3.  while($i<1000){
    4.  
    5.   $the[$i] = preg_split('/[ \r\n]+/s', $num[$i]);
    6.  
    7.  $new[$i]=sort($the[$i]);
    8.  $i++;
    9.  }
    10.  
    11.  echo '<pre>' . print_r($the, true) . '</pre>';
    12. ?>
    с explode с пробелом чтото не так так же вроде )
     
  17. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Например вот так:

    PHP:
    1. <?php
    2.  
    3. $numbers = "12 1 50 37 7 11
    4.  31 51 4 48 10 12
    5.  16 40 33 3 49 36";
    6.  
    7. $result = array();
    8.  
    9. foreach(preg_split('/[\r\n]+/s', $numbers) as $arrayLine) {
    10.     $arrayLine = explode(" ", $arrayLine);
    11.    
    12.     // Сортировка (не забываем про строковые пробелы)
    13.     sort($arrayLine, SORT_NUMERIC);
    14.    
    15.     // Добавление в массив
    16.     foreach($arrayLine as $k => $arrayElement)
    17.         if(!$arrayElement) unset($arrayLine[$k]);
    18.    
    19.     $result[] = $arrayLine;
    20. }
    21.  
    22. // Смотрим-с
    23. echo '<pre>' . print_r($result, true) . '</pre>';
    24.  
    25. ?>