Перейти к содержимому


Пользователь месяца
TimurR TimurR 1-й за Август
Очков активности: 726 3 темы, 35 сообщений, 11 баллов репутации
ТОП самых активных за этот месяц
  • Фотография ShowPrint
    #1

    ShowPrint (ShowPrint.ru)
    Очков активности: 207 2 темы, 17 сообщений, 6 баллов репутации

  • Фотография Ixman
    #2

    Ixman (o5cat.ru)
    Очков активности: 90 0 тем, 10 сообщений, 6 баллов репутации

  • Фотография WGN
    #3

    WGN (worldgamenews.com)
    Очков активности: 72 Вне конкурса за определение пользователя месяца

  • Фотография magnet
    #4

    magnet (rbfxdirect.com)
    Очков активности: 67.5 Вне конкурса за определение пользователя месяца

  • Фотография AnnaYa
    #5

    AnnaYa (topbase.ru)
    Очков активности: 33 2 темы, 5 сообщений, 2 балла репутации

  • Фотография Developer
    #6

    Developer
    Очков активности: 33 2 темы, 16 сообщений, 1 балл репутации

  • Фотография BLIK
    #7

    BLIK
    Очков активности: 33 Вне конкурса за определение пользователя месяца

  • Фотография Алексей111
    #8

    Алексей111
    Очков активности: 28.5 5 тем, 4 сообщения, 1 балл репутации

  • Фотография TimurR
    #9

    TimurR
    Очков активности: 27 Вне конкурса за определение пользователя месяца

  • Фотография fedornabilkin
    #10

    fedornabilkin (zaka4ano.ru)
    Очков активности: 24 0 тем, 4 сообщения, 4 балла репутации

  • Показать весь ТОП 10

Kwork.ru - услуги фрилансеров от 500 руб.

Поддержите форум! =)
Апдейты
  • Яндекс тИЦ: 19.11.2017
  • Яндекс выдача: 22.09.2018
Топ 5 участников по репутации


Помогите с функцией

#1 Artemch

Artemch
  • Неактивные
  • 10 сообщений
  • Репутация: 0
0

Отправлено 05 October 2016 - 12:15

Есть массив данных, который содержит названия городов

$baza = ['Астрахань','Брест','Владимир','Геленджик','Дмитров', 'Елань','Жуковский','Золотово','Ильино','Керчь', 'Ленск',
 'Магадан', 'Находка', 'Обвинск', 'Пермь', 'Реутов','Сколково','Тверь', 'Уфа', 'Фролы', 'Хабаровск', 'Царево', 'Челябинск', 'Шахты',
 'Щекино', 'Элиста', 'Юрга'];

Пишу функцию для которая при получении буквы от пользователя, вернет название города

function game ($a){
  foreach ($baza as $value) {
   	if($a == mb_substr($baza,0,1,'utf-8')){
   		return $baza[0];
   	}
 	   }
 	}

Делаю тест для функции 

assert('Астрахань' == game('А'));

Получаю  2 ошибки:

Warning: Invalid argument supplied for foreach() in C:\OpenServer\domains\profit.localhost\baza\data.php on line 6 - Почему инвалидный аргумент? Ведь в foreach массив $baza
 
Warning: assert(): Assertion failed in C:\OpenServer\domains\profit.localhost\baza\data.php on line 16 - это понятно что тест провален

 

 

  • 0

#2 ShowPrint

ShowPrint
  • Пользователь PRO
  • 3013 сообщений
  • Репутация: 813

Отправлено 05 October 2016 - 12:27

@Artemch, если я правильно понимаю, первое что бросается в глаза, то что в

mb_substr($baza,0,1,'utf-8')

должно стоять $value, а не $baza

 

UPD:

Если не заработает, то в чем еще, возможно, может быть засада - область видимости переменных. Перед обращением к foreach сделайте проверку видимости массива.


Сообщение отредактировал ShowPrint: 05 October 2016 - 12:31

  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#3 Artemch

Artemch
    Topic Starter
  • Неактивные
  • 10 сообщений
  • Репутация: 0

Отправлено 05 October 2016 - 13:04

@ShowPrint,Да точно $value, много раз переделывал и запутался. Поменял на  $value, те же ошибки, а с областью видимости не понятно, ведь весь код выглядит так

<?php
$baza = ['Астрахань','Брест','Владимир','Геленджик','Дмитров', 'Елань','Жуковский','Золотово','Ильино','Керчь', 'Ленск',
 'Магадан', 'Находка', 'Обвинск', 'Пермь', 'Реутов','Сколково','Тверь', 'Уфа', 'Фролы', 'Хабаровск', 'Царево', 'Челябинск', 'Шахты',
 'Щекино', 'Элиста', 'Юрга'];
function game ($a){
  foreach ($baza as $value) {
   	if($a == mb_substr($value,0,1,'utf-8')){
   		return $value[0];
   	}
 	   }
 	}
 assert('Астрахань' == game('А')); 

У массива $baze должна быть глобальная область видимости?


  • 0

#4 ShowPrint

ShowPrint
  • Пользователь PRO
  • 3013 сообщений
  • Репутация: 813

Отправлено 05 October 2016 - 13:14

@Artemch, я не прям профи, но есть подозрение что массив не обязательно должен быть видим внутри функции. По крайней мере если он невидим, то вполне понятна ошибка foreach - получается undefined в качестве аргумента вместо массива. Проще проверить, сделайте отладочный

echo $baza[0];

внутри function и посмотрите что он выведет.

 

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

- или поместить объявление массива внутрь функции;

- или передать массив второй переменной;


  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#5 Artemch

Artemch
    Topic Starter
  • Неактивные
  • 10 сообщений
  • Репутация: 0

Отправлено 05 October 2016 - 13:33

@ShowPrint, Да вы правы, массив не виден внутри функции

при вводе 

echo $baza[0];

ничего не выводит.

 

А если проверить внутри функции

var_dump($baza)

То выводит NULL


  • 0

#6 ShowPrint

ShowPrint
  • Пользователь PRO
  • 3013 сообщений
  • Репутация: 813

Отправлено 05 October 2016 - 13:34

@Artemch, массив не будет виден внутри функции ))) Инфа с примером здесь>>>

 

Там же найдете пути решения проблемы, например посредством global


Сообщение отредактировал ShowPrint: 05 October 2016 - 13:36

  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#7 Artemch

Artemch
    Topic Starter
  • Неактивные
  • 10 сообщений
  • Репутация: 0

Отправлено 05 October 2016 - 14:32

@ShowPrint, Спасибо что помогли, но так и не пойму, почему проверка не проходит 

 
Warning: assert(): Assertion failed in C:\OpenServer\domains\profit.localhost\baza\data.php on line 13
<?php
function game ($a){
 $baza = ['Астрахань','Брест','Владимир','Геленджик','Дмитров', 'Елань','Жуковский','Золотово','Ильино','Керчь', 'Ленск',
 'Магадан', 'Находка', 'Обвинск', 'Пермь', 'Реутов','Сколково','Тверь', 'Уфа', 'Фролы', 'Хабаровск', 'Царево', 'Челябинск', 'Шахты',
 'Щекино', 'Элиста', 'Юрга'];
     foreach ($baza as $value) {
   	if($a == mb_substr($value,0,1,'utf-8')){
   		return $value[0];
   	}
 	   }
 }
 assert('Астрахань' == game('А'));

Сообщение отредактировал Artemch: 05 October 2016 - 14:34

  • 0

#8 ShowPrint

ShowPrint
  • Пользователь PRO
  • 3013 сообщений
  • Репутация: 813

Отправлено 05 October 2016 - 14:42

@Artemch, $value у вас - не массив, а строка:

return $value[0];

Если не в этом причина, то ищите: к сожалению не приходилось сталкиваться раньше с assert - не подскажу.

 

Могу ещё посоветовать: когда что-то не работает, то проверяйте промежуточные данные, например через echo - так можно понять что-именно не работает и раскопать причину ошибки. По крайней мере я именно так поступаю в аналогичных случаях.


  • 1
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#9 Artemch

Artemch
    Topic Starter
  • Неактивные
  • 10 сообщений
  • Репутация: 0

Отправлено 05 October 2016 - 16:25

@ShowPrint, Спасибо большое за помощь, буду искать


  • 0

#10 ShowPrint

ShowPrint
  • Пользователь PRO
  • 3013 сообщений
  • Репутация: 813

Отправлено 05 October 2016 - 17:11

@Artemch, для начала надо попробовать:

return $value;

:rolleyes:


  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


robot

robot
  • Пользователь PRO
  • 2652 сообщений
  • Репутация: 85


Похожие темы

  Название темы Автор Статистика Последнее сообщение

Оформление форума – IPBSkins.ru