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
Форумы портала PHP.SU :: Версия для печати :: Увеличить производительность скрипта
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Увеличить производительность скрипта

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

1. chaynyk - 21 Апреля, 2009 - 11:06:16 - перейти к сообщению
скрипт рабочий, но нужно написать его по другому, так что бы скрипт (функция alph(); ) выполнялся быстрей по времени и ел меньше ресурсов.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $value3="z";
  3. function alph($letter) {
  4. $alphabet=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
  5. for ($i=0; $i<count($alphabet); $i++) {
  6.      if ($letter==$alphabet[$i]) {
  7.      if ($i+1!==count($alphabet))   {$newname=$alphabet[$i+1]; }  else  {$newname=$alphabet[0].$alphabet[0];}
  8.      }
  9.      }
  10. return  $newname;
  11. }
  12. $ss=alph($value3);
  13. echo $ss;
  14.  ?>

суть скрипта такова, есть значение $value1.$value2.$value2, где $value3 значение происходит методом подстановки из функции alph() понятно типа: после "j" идет "k" и так по нарастающий. Массив $alphabet состоит только из алфавита другие символы не нужны. Значение $value2 один ко многим $value3.
Если кто имеет достаточно, знаний в PHP, что бы корректно модернизировать скрипт, буду благодарен.
2. Champion - 21 Апреля, 2009 - 11:12:43 - перейти к сообщению
Думать лень, но что увидел.
chaynyk пишет:
for ($i=0; $i<count($alphabet); $i++)
Лучше заменить на
CODE (text):
скопировать код в буфер обмена
  1. $c = count($alphabet);
  2. for ($i = 0; $i < $c; $i++)
. Хотя, цикл небольшой. Особой разницы не заметишь.

Да и вообще, перебирать массив в цикле незачем. Есть функции in_array и array_search.
3. Stierus - 21 Апреля, 2009 - 11:29:38 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function alph($letter) {
  2.         $alphabet=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
  3.         $cnt = count($alphabet); //можно тупо прописать $cnt = 26;
  4.         /* 1-й вариант : */
  5.         $key = array_search($letter, $alphabet);
  6.         /* 2-й вариант */
  7.         $alphabet_keys=array("a"=>0,"b"=>1,"c"=>2,"d"=>3,"e"=>4,"f"=>5,"g"=>6,"h"=>7,"i"=>8,"j"=>9,"k"=>10,"l"=>11,"m"=>12,"n"=>13,"o"=>14,"p"=>15,"q"=>16,"r"=>17,"s"=>18,"t"=>19,"u"=>20,"v"=>21,"w"=>22,"x"=>23,"y"=>24,"z"=>25);
  8.         $key = $alphabet_keys[$letter];
  9.         /*  в разных ситуациях разные способы могут быть быстрее, посмотри, какой из них у вас будет работать быстрее (выбери один из) */
  10.         if($key == $cnt-1){
  11.                 return 'aa';
  12.         }
  13.         else{
  14.                 return $alphabet[$key+1];
  15.         }
  16. }

Вроде бы, точная копия твоего скрипта. Зачем такое нужно - мне непонятно, функция не универсальна
4. Champion - 21 Апреля, 2009 - 11:35:19 - перейти к сообщению
Еще объявление массива стоит вынести. И сделать его глобальным или передать по ссылке. А то при каждом вызове функции он заново создается
5. Stierus - 21 Апреля, 2009 - 11:53:15 - перейти к сообщению
Цитата:
А то при каждом вызове функции он заново создается
Акселераторы же следят за этим Улыбка
6. valenok - 21 Апреля, 2009 - 18:03:33 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $aAlphabet = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",'aa');
  3. echo $aAlphabet[array_search('z', $aAlphabet)+1]);
7. valenok - 22 Апреля, 2009 - 08:31:37 - перейти к сообщению
$aAlphabet = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",'aa');

echo $aAlphabet[array_search('z', $aAlphabet)+1]);
8. chaynyk - 24 Апреля, 2009 - 21:00:59 - перейти к сообщению
valenok пишет:
$aAlphabet = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",'aa');

echo $aAlphabet[array_search('z', $aAlphabet)+1];

Спасибо!
Что-то как-то не пришло в голову добавить 'aa'. Скрипт работает, в три раза быстрей, в отличии от первоначальной версии.

 

Powered by ExBB FM 1.0 RC1