Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2011, 15:24   #1
Gen_r_questions
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 81
По умолчанию current

Почему 2 этих кода выдают разные результаты
Код:
<?php
$array = array(
    fruit1 => "apple",
    fruit2 => "orange",
    fruit3 => "grape",
    fruit4 => "apple",
    fruit5 => "apple");
 
        reset($array);
while ($fruit_name = current($array)==true){
    if ($fruit_name == "apple")
        echo key($array)."<br>";
    next($array);
}
 
?>
Отв:
fruit1
fruit2
fruit3
fruit4
fruit5
Код:
<?php
$array = array(
    fruit1 => "apple",
    fruit2 => "orange",
    fruit3 => "grape",
    fruit4 => "apple",
    fruit5 => "apple");
 
        reset($array);
while ($fruit_name = current($array)){
    if ($fruit_name == "apple")
        echo key($array)."<br>";
    next($array);
}
 
?>
Отв:
fruit1
fruit4
fruit5

Не совсем понимаю, как работает эта строка
Код:
	while ($fruit_name = current($array)==true){
Для меня , это тоже самое, что и
Код:
	while ($fruit_name = current($array)){
но работает по-другому почему то
Gen_r_questions вне форума Ответить с цитированием
Старый 16.02.2011, 15:52   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Может стоит нормально назвать тему?
SkyM@n вне форума Ответить с цитированием
Старый 16.02.2011, 16:21   #3
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,714
По умолчанию

Цитата:
while ($fruit_name = current($array)==true){
Сначала делается операция стравнения "current($array)==true" php так как сравнение не строгое будет считать что результат сравнения true, а $fruit_name примет значение результата сравнения.
if ($fruit_name == "apple") аналогично php так как сравнение не строгое будет считать что результат сравнения true.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 16.02.2011, 17:10   #4
Gen_r_questions
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 81
По умолчанию

Почему в первом случае как будто пропускается условие
Код:
if ($fruit_name == "apple")
        echo key($array)."<br>";
Почему он не выводит все apple
Gen_r_questions вне форума Ответить с цитированием
Старый 16.02.2011, 17:29   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Gen_r_questions Посмотреть сообщение
Почему в первом случае как будто пропускается условие
Код:
if ($fruit_name == "apple")
        echo key($array)."<br>";
Ну вам же всё подробно объяснил mv28jam - прямо построчно по вашему коду.
Проверьте :
PHP код:
$fruit_name TRUE;
if(
$fruit_name == 'apple'){
    echo 
'TRUE == apple';
}
else{
    echo 
'TRUE != apple';

Нужна высокая точность - используйте строгое равенство для условия(===)
Andkorol вне форума Ответить с цитированием
Старый 16.02.2011, 19:05   #6
Gen_r_questions
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 81
По умолчанию

А как проверяется в этой строке условие цикла ?
Код:
while ($fruit_name = current($array)){
Gen_r_questions вне форума Ответить с цитированием
Старый 16.02.2011, 22:26   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Gen_r_questions Посмотреть сообщение
А как проверяется в этой строке условие цикла ?
Код:
while ($fruit_name = current($array)){
А почитать описание используемой функции current() для общего развития..?
Цитата:
Функция current() просто возвращает значение элемента массива, на который указывает его внутренний указатель. Она не перемещает указатель куда бы то ни было. Если внутренний указатель за пределами списка элементов, current() возвращает FALSE.
Цикл работает,пока функция не вернёт FALSE.
Andkorol вне форума Ответить с цитированием
Старый 17.02.2011, 09:59   #8
Gen_r_questions
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 81
По умолчанию

Andkorol
Тогда почему в ответе нету false?
Код:
<?php
$array = array(
    fruit1 => "apple",
    fruit2 => "orange",
    fruit3 => "grape",
    fruit4 => "apple",
    fruit5 => "apple");
 
        reset($array);
while ($fruit_name = current($array)){
    if ($fruit_name == true)
        echo ("true")."<br>";
	if ($fruit_name == false)
        echo ("false")."<br>";
    next($array);
}
 
?>
Отв
true
true
true
true
true
Gen_r_questions вне форума Ответить с цитированием
Старый 17.02.2011, 10:44   #9
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,714
По умолчанию

Цитата:
Тогда почему в ответе нету false?
Видимо из-за снега на марсе и атаки НЛО на месопатамию.

while ($fruit_name = current($array)) => while ($fruit_name = false) => while (false) =>stop
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 17.02.2011, 10:52   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Gen_r_questions Посмотреть сообщение
Andkorol
Тогда почему в ответе нету false?
Читайте эту фразу медленно и много раз - до наступления полного просветления:
Цитата:
Цикл работает,пока функция не вернёт FALSE.
Возможно это поможет скорейшему пониманию принципа работы циклов:
Цитата:
Цикл с предусловием while работает по следующим принципам:
1.Вычисляется значение логического выражения.
2.Если значение истинно, выполняется тело цикла, в противном случае - переходим на следующий за циклом оператор.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск