Զանգվածի վերածելու օպտիմիզացիա PHP-ում

Միշտ չէ, որ անհրաժեշտ է տողը բաժանել զանգվածի, որևէ բան անելու համար:

Դիտարկենք օրինակով: Հաջորդ օրինակում կոդի հեղինակը ստուգում է, արդյոք տողում կա 3 թվանշան.

php<?php
  $str = '12345';
  $arr = explode('', $str); // բաժանենք զանգվածի
  
  if (in_array(3, $arr)) {
    echo 'կա';
  } else {
    echo 'չկա';
  }
?>

Հեղինակը լավն է - օգտագործում է PHP-ի ներդրված ֆունկցիաները, փոխարենը, որ ստեղծի իր կոճերը:

Սակայն կոդը միևնույն է օպտիմալ չէ. այստեղ կարիք չկա տողը բաժանել զանգվածի, քանի որ գոյություն ունի պատրաստի ֆունկցիա strpos, որ կատարում է որոնում տողում.

php<?php
  $str = '12345';
  
  if (strpos(str, 3) !== false) {
    echo 'կա';
  } else {
    echo 'չկա';
  }
?>

Ինչու՞ է այստեղ զանգվածի բաժանելը վատ: Քանի որ, նախ, զանգվածի բաժանելու համար ծախսվում են պրոցեսորի ռեսուրսները, երկրորդ, ստացված զանգվածը կզբաղեցնի տեղ օպերատիվ հիշողությունում (ընդ որում, այն ավելի մեծ կլինի, քան տեղը, որը զբաղեցնում է բուն տողը):

Բարոյականություն. մի բաժանեք տողը զանգվածի, եթե կա եղանակ դա չանելու:

Задание 1

Հաջորդ կոդում ինչ-որ ծրագրավորող շրջում է տողի նիշերը հակառակ հերթականությամբ: Օպտիմիզացրեք այս ծրագրավորողի լուծումը.

php<?php
  $str = '123345';
  $rev = implode('', array_reverse(explode('', $str)));
  echo $rev; // կցուցադրի '54321'
?>
Задание 2

Հաջորդ կոդում ինչ-որ մեկը փնտրում է բառերի քանակը տեքստում: Օպտիմիզացրեք այս ծրագրավորողի լուծումը.

php<?php
  $str = 'aaa bbb ccc'; // ինչ-որ երկար տող
  echo count(explode(' ', $str));
?>