Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: изменение массива после функции

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
AndreyT
Отправлено: 29 Января, 2010 - 02:07:08
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




в техникуме дали задание написать алгоритм сортировки числового массива

и я два дня думал и все таки сделал скрипт который сортирует массив чисел по возрастанию и он работает, после выполнения кода массив меняется и теперь хочу этот код засунуть в функцию и чтоб после вызова этой функции исходный массив менялся а он не хочет, а просто вне функции массив меняется

помогите что не так в коде

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $num = array(4,1,7,10,2,3,8,6,11,5,9,14,12,20,18,15,17,13);
  5.  
  6. var_dump($num);
  7.  
  8. function mySort($arr){
  9.         $lenArr = count($arr);
  10.         $less = $lenArr - 1;
  11.         $nextIndex = 0;
  12.         $posNewList = 0;
  13.         $newArray = array();
  14.  
  15. for($i = 0; $i < $lenArr; $i++){
  16.         while($nextIndex != $lenArr){
  17.                 if ($arr[$i] < $arr[$nextIndex]){
  18.                         $posNewList++;
  19.                 }
  20.                 $nextIndex++;
  21.         }
  22.         $indexNewList = $less - $posNewList;
  23.         $newArray[$indexNewList] = $arr[$i];
  24.         $nextIndex = 0;
  25.         $posNewList = 0;
  26. }
  27.         $sortArr = $newArray;
  28.         $arr = $sortArr;
  29. }
  30.  
  31. mySort($num);
  32.  
  33. var_dump($num);
  34.  
  35. for($z = 0; $z < count($num); $z++){
  36.         echo $num[$z] . "<br />";
  37. }
  38.  
  39. ?>
  40.  


код вне функции

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $num = array(4,1,7,10,2,3,8,6,11,5,9,14,12,20,18,15,17,13);
  5.  
  6. $lenArr = count($num);
  7. $less = $lenArr - 1;
  8. $nextIndex = 0;
  9. $posNewList = 0;
  10. $newArray = array();
  11.  
  12. for($i = 0; $i < $lenArr; $i++){
  13.         while($nextIndex != $lenArr){
  14.                 if ($num[$i] < $num[$nextIndex]){
  15.                         $posNewList++;
  16.                 }
  17.                 $nextIndex++;
  18.         }
  19.         $indexNewList = $less - $posNewList;
  20.         $newArray[$indexNewList] = $num[$i];
  21.         $nextIndex = 0;
  22.         $posNewList = 0;
  23. }
  24.  
  25. var_dump($num);
  26.  
  27. $num = $newArray;
  28.  
  29. var_dump($num);
  30.  
  31. for($z = 0; $z < count($num); $z++){
  32.         echo $num[$z] . "<br />";
  33. }
  34.  
  35. ?>
  36.  

(Отредактировано автором: 29 Января, 2010 - 02:11:01)

 
 Top
SAD
Отправлено: 29 Января, 2010 - 05:48:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Я тоже столкнулся с этой "проблемой" сначала,но все просто, функция работает с копией массива, то есть твоему массиву нужно присвоить результат работы функции.
сначала, добавь такую строчку
в своей функции после
PHP:
скопировать код в буфер обмена
  1.  
  2. $sortArr = $newArray;
  3. $arr = $sortArr;
, а потом сделай так вне функции

(Отредактировано автором: 29 Января, 2010 - 05:50:21)

 
 Top
Champion Супермодератор
Отправлено: 29 Января, 2010 - 07:45:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




SAD пишет:

$sortArr = $newArray;
$arr = $sortArr;
Зачем? С чем в функции работал, то и возвращай. Это одно решение, а второе - передать массив по ссылке:
CODE (text):
скопировать код в буфер обмена
  1. function my_sort(&$arr) {......... тут нет returna} ....
  2. $a = array(2,4,9,5);
  3. my_sort($a);
  4. var_dump($a);
 
 Top
Ch_chov
Отправлено: 29 Января, 2010 - 09:17:43
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




AndreyT, эти алгоритмы давно известны.

Вот, например, сортировка пузырьком http://ru[dot]wikipedia[dot]org/wiki/Сор[dot][dot][dot]ировка_пузырьком

На PHP это можно записать так:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $num = array(4,1,7,10,2,3,8,6,11,5,9,14,12,20,18,15,17,13);
  3.  
  4. function mySort(&$a){
  5.   $cnt = count($a);
  6.   $t = true;
  7.   while($t) {
  8.     $t = false;
  9.     for($i = 0; $i < $cnt-1; $i++) {
  10.       if($a[$i] > $a[$i+1]) {
  11.         $ai = $a[$i]; $a[$i] = $a[$i+1]; $a[$i+1] = $ai;
  12.         $t = true;
  13.       }
  14.     }
  15.   }
  16. }
  17. mySort($num);
  18. echo '<pre>',print_r($num, 1),'</pre>';
 
 Top
SAD
Отправлено: 29 Января, 2010 - 10:53:17
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Champion пишет:
Зачем? С чем в функции работал, то и возвращай. Это одно решение, а второе - передать массив по ссылке:

я тут причем? Однако исходник не мой
 
 Top
AndreyT
Отправлено: 29 Января, 2010 - 11:52:42
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Ch_chov пишет:

AndreyT, эти алгоритмы давно известны.


после того как я это написал я нашел похожий
(Добавление)
а как можно проверить скорость алгоритма
 
 Top
JustUserR
Отправлено: 29 Января, 2010 - 13:35:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




AndreyT А чем не устроил usort/uksort и соответствующая версия функции-callback?


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
AndreyT
Отправлено: 29 Января, 2010 - 14:48:57
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




JustUserR пишет:
AndreyT А чем не устроил usort/uksort и соответствующая версия функции-callback?


они меня устраивают но задали сделать без встроенных функций, а самому
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB