1 Востаннє редагувалося savelikan (30.06.2015 15:16:37)

Тема: Перемістити останній символ стрічки на початок

Всім привіт! От стараюся перемістити останній символ на початок рядка і замінити його на знак "=".
Ось, що в мене в коді:

$text_tp = explode("\n",$text);
FOREACH($text_tp AS $value){
    IF(substr($value,(strlen($value)-1),1)=="*"){
        $res[] = "=".substr($value,0,(strlen($value)-1));
    } else {
        $res[] = $value;
    }
}
$text = implode("\n",$res);        

І текст, який я редагую:

1.    Де частіше застосовують затискач Мікуліча:
A.    для накладання на судини;
B.    для захоплення м’язів;
C.    для захоплення підшкірної жирової клітковини;
D.    для фіксації стерильного матеріалу при ізоляції черевної порожнини; *
E.    для фіксації сухожиль.
2.    Що вивчає топографічна анатомія:
A.    системи органів;
B.    варіанти будови органів;
C.    морфологічну будову окремих ділянок організму; *
D.    іннервацію кровопостачання органів;
E.    вікові зміни органів.
3.    Що таке скелетотопія:
A.    відношення анатомічних утворів до ділянок тіла;
B.    відношення анатомічних утворів до кісток скелета; *
C.    відношення анатомічних утворів областей організму;
D.    варіанти кровопостачання органів;
E.    відношення між органами.

Підкажіть будь ласка, в чому помилка?

2 Востаннє редагувалося Betterthanyou (30.06.2015 15:38:12)

Re: Перемістити останній символ стрічки на початок

Взагалі то в вас останнії символ не завжди "*"
наприклад тут останній двокрапка ":"
1.    Де частіше застосовують затискач Мікуліча:

IF(substr($value,(strlen($value)-1),1)=="*")

тобто ця умова не правильна

3

Re: Перемістити останній символ стрічки на початок

Betterthanyou написав:

Взагалі то в вас останнії символ не завжди "*"
наприклад тут останній двокрапка ":"
1.    Де частіше застосовують затискач Мікуліча:

IF(substr($value,(strlen($value)-1),1)=="*")

тобто ця умова не правильна

По ідеї зірочка позначає вірну відповідь і мені її треба перемістити на початок і замінити на знак дорівнює)

4 Востаннє редагувалося Betterthanyou (30.06.2015 16:02:01)

Re: Перемістити останній символ стрічки на початок

<?php
$text = array(
"1.    Де частіше застосовують затискач Мікуліча:",
"A.    для накладання на судини;",
"B.    для захоплення м’язів;",
"C.    для захоплення підшкірної жирової клітковини;",
"D.    для фіксації стерильного матеріалу при ізоляції черевної порожнини; *",
"E.    для фіксації сухожиль.",
"2.    Що вивчає топографічна анатомія:",
"A.    системи органів;",
"B.    варіанти будови органів;",
"C.    морфологічну будову окремих ділянок організму; *",
"D.    іннервацію кровопостачання органів;",
"E.    вікові зміни органів.",
"3.    Що таке скелетотопія:",
"A.    відношення анатомічних утворів до ділянок тіла;",
"B.    відношення анатомічних утворів до кісток скелета; *",
"C.    відношення анатомічних утворів областей організму;",
"D.    варіанти кровопостачання органів;",
"E.    відношення між органами.",
);

$res="";

foreach($text as $value)
{
    if($value[strlen($value)-1]=="*")
        $res.="= ".str_replace("*","",$value)."<br>";
    else
        $res.=$value."<br>";
}

echo $res;
?>

Так ?

5

Re: Перемістити останній символ стрічки на початок

Взагалі краще було б побачити помилку, але якщо брати абстрактний код, то тут я бачу тільки одну можливість для помилки - якщо ви працюєте з кодуванням UTF-8, то замість strlen та substr потрібно використовувати мультибайтові аналоги - mb_strlen та mb_substr.

6

Re: Перемістити останній символ стрічки на початок

Ось псевдокод:

якщо стрічка закінчується на зірочку {
- трімаємо зірочку з правої сторони
- додаємо символ = на початок стрічки
}

7

Re: Перемістити останній символ стрічки на початок

дякую)

8

Re: Перемістити останній символ стрічки на початок

Прооную оптимальніший варіант.

<?php

$text = array(
"1.    Де частіше застосовують затискач Мікуліча:",
"A.    для накладання на судини;",
"B.    для захоплення м’язів;",
"C.    для захоплення підшкірної жирової клітковини;",
"D.    для фіксації стерильного матеріалу при ізоляції черевної порожнини; *",
"E.    для фіксації сухожиль.",
"2.    Що вивчає топографічна анатомія:",
"A.    системи органів;",
"B.    варіанти будови органів;",
"C.    морфологічну будову окремих ділянок організму; *",
"D.    іннервацію кровопостачання органів;",
"E.    вікові зміни органів.",
"3.    Що таке скелетотопія:",
"A.    відношення анатомічних утворів до ділянок тіла;",
"B.    відношення анатомічних утворів до кісток скелета; *",
"C.    відношення анатомічних утворів областей організму;",
"D.    варіанти кровопостачання органів;",
"E.    відношення між органами.",
);

foreach($text as $value)
$str .= substr($value, -1) == '*' ? '='.rtrim($value,'*').'<br>' : $value.'<br>';
echo $str;
=)

9

Re: Перемістити останній символ стрічки на початок

Оптимально також preg_repace

10

Re: Перемістити останній символ стрічки на початок

funivan написав:

Оптимально також preg_repace

Читав, що регулярки працюють повільніше..
А хз як насправді..

=)

11

Re: Перемістити останній символ стрічки на початок

VTrim написав:
funivan написав:

Оптимально також preg_repace

Читав, що регулярки працюють повільніше..
А хз як насправді..

Нормальні регулярки, як не дивно, працюють швидше. Бо компілюються.

12

Re: Перемістити останній символ стрічки на початок

Мав на увазі не тільки по швидкості, а і читабельності ;)

$line = preg_replace('!(.+)\*$!', '=$1', $line).'<br>';

13 Востаннє редагувалося VTrim (01.07.2015 17:54:09)

Re: Перемістити останній символ стрічки на початок

дубльоване повiдомлення..

=)

14 Востаннє редагувалося VTrim (01.07.2015 17:56:47)

Re: Перемістити останній символ стрічки на початок

koala написав:
VTrim написав:
funivan написав:

Оптимально також preg_repace

Читав, що регулярки працюють повільніше..
А хз як насправді..

Нормальні регулярки, як не дивно, працюють швидше. Бо компілюються.

В PHP вони не "компiлюються", ви не зможете зкомпiлювати та зберегти байт код для подальшого використання.
Вони просто кешуються i якщо викликати ту ж саму регулярку ще раз,то результат буде трiшки швидший.
Iх використання як на мене, не може бути швидшим за вбудованi методи для роботи з рядками.

Хоча наприклад preg_replace видаэ еррор типу Compile fatal

=)