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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Aviator
Отправлено: 02 Декабря, 2011 - 17:46:33
Post Id


Новичок


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


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




Добрый день, не могу понять что не так.
Есть программа, которая должна переводить цифры в прописной вид: 5 - пять.
Вариант для единиц:
PHP:
скопировать код в буфер обмена
  1.  
  2. $unit["1"]="Один";
  3. $unit["2"]="Два";
  4. $unit["3"]="Три";
  5. $unit["4"]="Четыре";
  6. $unit["5"]="Пять";
  7. $unit["6"]="Шесть";
  8. $unit["7"]="Семь";
  9. $unit["8"]="Восемь";
  10. $unit["9"]="Девять";
  11.  
  12. $finally == "";
  13.  
  14. for($j = 1;$j <= count($unit);$j++)
  15.                         if($j == $Text[0])
  16.                                 $finally = $finally . $unit[$j]." ";
  17. echo "<center><h1>".$Text." : ".$finally."</h1></center>";

Этот вариант работает.
А этот нет:
PHP:
скопировать код в буфер обмена
  1. $unit["1"]="Один";
  2. $unit["2"]="Два";
  3. $unit["3"]="Три";
  4. $unit["4"]="Четыре";
  5. $unit["5"]="Пять";
  6. $unit["6"]="Шесть";
  7. $unit["7"]="Семь";
  8. $unit["8"]="Восемь";
  9. $unit["9"]="Девять";
  10.  
  11. $finally == "";
  12. function unit()
  13. {
  14.    for($j = 1;$j <= count($unit);$j++)
  15.         if($j == $Text[0])
  16.                 $finally = $finally . $unit[$j]." ";
  17. }
  18. unit();
  19. echo "<center><h1>".$Text." : ".$finally."</h1></center>";

Что не так?
Почему в функции не хочет работать?

(Отредактировано автором: 02 Декабря, 2011 - 17:47:45)

 
 Top
OrmaJever Модератор
Отправлено: 02 Декабря, 2011 - 17:49:58
Post Id



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


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


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




кто вас учил числовые индексы масивов в кавычки брать?

во-первых переменая $finally не определена
Aviator пишет:
$finally == "";

во-вторых у функции другая облать видимости и $finally за функцией и в функции разные.

PHP:
скопировать код в буфер обмена
  1. function unit($u)
  2. {
  3.    $finally = "";
  4.    for($j = 1;$j <= count($unit);$j++)
  5.         if($j == $Text[0]) // что такое $Text[0] вобще непонятно
  6.                 $finally = $finally . $u[$j]." ";
  7.    return $finally;
  8. }
  9. echo "<center><h1>".$Text." : ".unit($unit)."</h1></center>";


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Bio man
Отправлено: 02 Декабря, 2011 - 17:54:08
Post Id


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


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




global поможет Подмигивание
 
 Top
Aviator
Отправлено: 02 Декабря, 2011 - 18:04:49
Post Id


Новичок


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


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




Цитата:
кто вас учил числовые индексы масивов в кавычки брать?

Это ассоциативный массив. Была такая идея.
Цитата:
// что такое $Text[0] вобще непонятно

Забыл скопировать строчку:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET["text"])) $Text = $_GET["text"];

Цитата:
во-вторых у функции другая облать видимости и $finally за функцией и в функции разные.

Ваш вариант, тоже не работает:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET["text"])) $Text = $_GET["text"];
  2.  
  3. $unit[1]="Один";
  4. $unit[2]="Два";
  5. $unit[3]="Три";
  6. $unit[4]="Четыре";
  7. $unit[5]="Пять";
  8. $unit[6]="Шесть";
  9. $unit[7]="Семь";
  10. $unit[8]="Восемь";
  11. $unit[9]="Девять";
  12.  
  13.  
  14. function unit($u)
  15. {
  16.    $finally = "";
  17.    for($j = 1;$j <= count($unit);$j++)
  18.         if($j == $Text[0])
  19.                 $finally = $finally . $u[$j]." ";
  20.    return $finally;
  21. }
  22. echo "<center><h1>".$Text." : ".unit($unit)."</h1></center>";

Выводит "5:"
(Добавление)
Цитата:
global поможет

Спасибо, помогло.
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET["text"])) $Text = $_GET["text"];
  2.  
  3. $unit[1]="Один";
  4. $unit[2]="Два";
  5. $unit[3]="Три";
  6. $unit[4]="Четыре";
  7. $unit[5]="Пять";
  8. $unit[6]="Шесть";
  9. $unit[7]="Семь";
  10. $unit[8]="Восемь";
  11. $unit[9]="Девять";
  12.  
  13.  
  14. function unit()
  15. {
  16.         global $Text;
  17.         global $unit;
  18.         $finally = "";
  19.            for($j = 1;$j <= count($unit);$j++)
  20.                         if($j == $Text[0])
  21.                                         $finally = $finally . $unit[$j]." ";
  22.    return $finally;
  23. }
  24. echo "<center><h1>".$Text." : ".unit($unit)."</h1></center>";

(Отредактировано автором: 02 Декабря, 2011 - 18:06:52)

 
 Top
Bio man
Отправлено: 02 Декабря, 2011 - 19:21:49
Post Id


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


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




Aviator пишет:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET["text"])) $Text = $_GET["text"];

а что в противном случае? $Text не установлена, то есть нул. по идее почти всегда должен быть else, в вашем случае он должен быть, т.к. вы инициализируете переменную с которой потом работаете, а работать с не существующей переменной не надо
 
 Top
Aviator
Отправлено: 02 Декабря, 2011 - 19:32:56
Post Id


Новичок


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


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




Цитата:
а что в противном случае? $Text не установлена, то есть нул. по идее почти всегда должен быть else, в вашем случае он должен быть, т.к. вы инициализируете переменную с которой потом работаете, а работать с не существующей переменной не надо

Вы правы, такой вариант приемлен?
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET["text1"]))
  2.         $Text = $_GET["text"];
  3. else {
  4.         echo "<h1>Ошибка! Данные не переданы!</h1>";
  5.         exit;
  6. }
 
 Top
Данил_123
Отправлено: 02 Декабря, 2011 - 19:42:36
Post Id


Участник


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


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




Aviator проверки сами пилите, но я бы решил поставленую задачу так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function LettersToNumbers(){
  4. $arr=array("один" => 1, "два" => 2, "три" => 3, "четыре" => 4, "пять" => 5);
  5. $number = $_GET[number];
  6. $text = array_search($number, $arr);
  7. return $text;
  8. }
  9.  
  10. print "Цисло: ".$_GET[number]." , пишется: ".LettersToNumbers();
  11.  
  12. ?>

(Отредактировано автором: 02 Декабря, 2011 - 19:43:04)



-----
http://mysitecost.ru
 
 Top
Aviator
Отправлено: 02 Декабря, 2011 - 19:49:49
Post Id


Новичок


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


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




Цитата:
Aviator проверки сами пилите, но я бы решил поставленую задачу так:

Да вариант хороший, но про array_search, я не знал. Буду иметь в виду.
 
 Top
Bio man
Отправлено: 02 Декабря, 2011 - 20:03:50
Post Id


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


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




Aviator пишет:
Вы правы, такой вариант приемлен?
PHP:
для начала да.
в чем состоит ваша задача? если я правильно понял, не проще сделать так?
PHP:
скопировать код в буфер обмена
  1. function unit()
  2. {
  3.    global $Text, $unit;
  4.    return $unit[(int)$Text];
  5. }

эт если $Text число
и сделай так
если не надо выводить 0
 
 Top
Данил_123
Отправлено: 02 Декабря, 2011 - 20:08:22
Post Id


Участник


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


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




Bio man на сколько понял я, автору нужно веденное число преобразовать в текст.. Где работа с массивом

(Отредактировано автором: 02 Декабря, 2011 - 20:23:44)



-----
http://mysitecost.ru
 
 Top
Aviator
Отправлено: 02 Декабря, 2011 - 20:16:36
Post Id


Новичок


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


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




Интересно. Возьму на заметку.
 
 Top
Bio man
Отправлено: 02 Декабря, 2011 - 20:24:33
Post Id


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


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




Данил_123 пишет:
Где работа с массивом
вот она
Bio man пишет:
 
 Top
Данил_123
Отправлено: 02 Декабря, 2011 - 20:30:26
Post Id


Участник


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


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




Bio man это преобразование переменной tехt в целое число.. Может ошибаюсь, но var_dump((int)$text) при tехt равной "один" не вернет 1(единицу)..
зы: может не прав, не читал код автора, только вопрос


-----
http://mysitecost.ru
 
 Top
OrmaJever Модератор
Отправлено: 02 Декабря, 2011 - 21:08:17
Post Id



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


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


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




Aviator пишет:
Забыл скопировать строчку:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET["text"])) $Text = $_GET["text"];

Когда читал так и хотел сказать что это дурной тон, а потом глянул и увидел что это прям тут же вылезло боком когда дочитал пост.
Aviator пишет:
Ваш вариант, тоже не работает:

Не работает потому что переменая $Text обьявлена в глобальном пространстве и в функции её просто нет. А что бы такого небыло нужно использовать суперглобальные масивы на прямую а не через левую переменую
PHP:
скопировать код в буфер обмена
  1. $_GET["text"] = isset($_GET['text']) ? $_GET['text'] : '';
  2. // и в функции условие будет такое
  3. if($j == $_GET['text'][0]) ...
  4.  

ах да, использовать в функциях ключевое слово global тоже не хорошо, оно существено замедляет скрипт.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Aviator
Отправлено: 02 Декабря, 2011 - 21:10:23
Post Id


Новичок


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


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




Цитата:
Не работает потому что переменая $Text обьявлена в глобальном пространстве и в функции её просто нет. А что бы такого небыло нужно использовать суперглобальные масивы на прямую а не через левую переменую

Уже разобрался. Спасибо.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB