Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: правильна ли логика?
 
 автор: admiral   (18.12.2009 в 23:07)   письмо автору
 
 

Задача такова.
В котором могут быть значения 1,2,3. Причем может быть только одно значение, например 1 или 3, а могут быть и все значения 1,2,3
Приоретететным считается 1, затем если такого значения нет, то 2, и только потом 3. В зависимости от приоретета должно выполняться разные условия.
Правильно ли в данном примере решена задача?

<?php

$array 
= array(1,2,3);
$block "";
switch(
$array)
{
    case 
in_array(1,$array):
    
$block "first_block.php";
    break;
    case 
in_array(2,$array):
    
$block "second_block.php";
    break; 
    case 
in_array(3,$array):
    
$block "third_block.php";;
    break;
    default:                                                           
    
$block "rand_block.php";
    break;  
}

    include 
$block;
?>

  Ответить  
 
 автор: Trianon   (18.12.2009 в 23:27)   письмо автору
 
   для: admiral   (18.12.2009 в 23:07)
 

Оператор Switch не занимается оценкой условий.
Оператор Switch выполняет сопоставление значения скалярного выражения с рядом констант.
Всё.

  Ответить  
 
 автор: admiral   (18.12.2009 в 23:48)   письмо автору
 
   для: Trianon   (18.12.2009 в 23:27)
 

Как раз-таки не все. Он выполняет сопоставление до тех пор, пока не найдено первое соответствие, и если оно найдено, то на дальнейший ряд констант он забивает.
Следовательно, задача была найти соответствие по приоритетному значению. Вот я и спросил для этих целей switch самое оптимальное решение?

  Ответить  
 
 автор: Trianon   (18.12.2009 в 23:56)   письмо автору
 
   для: admiral   (18.12.2009 в 23:48)
 

Вы оптимальное решение ищете?
Нашли бы сперва просто работающее.
То что у Вас написано, на работающее как-то не смахивает.

UPD.
Сопоставление выполняется со всеми параллельно и одновременно. Если канонически.

  Ответить  
 
 автор: Fractured#   (18.12.2009 в 23:59)   письмо автору
 
   для: Trianon   (18.12.2009 в 23:56)
 

оно работает, поскольку true равно (==) непустому массиву. "Ошибка" будет правда при пустом массиве.

[поправлено модератором]

  Ответить  
 
 автор: admiral   (19.12.2009 в 00:19)   письмо автору
 
   для: Fractured#   (18.12.2009 в 23:59)
 

Пустого массива как я в условии сказал быть не может вообще.

  Ответить  
 
 автор: admiral   (19.12.2009 в 00:23)   письмо автору
 
   для: Fractured#   (18.12.2009 в 23:59)
 

Кстати что имеется ввиду за ошибка при пустом массиве? Тоесть по идее даже если массив будет пустым сработает секция default

  Ответить  
 
 автор: admiral   (19.12.2009 в 00:26)   письмо автору
 
   для: Fractured#   (18.12.2009 в 23:59)
 

Хотя да действительно, Вы правы

  Ответить  
 
 автор: Trianon   (19.12.2009 в 00:37)   письмо автору
 
   для: admiral   (19.12.2009 в 00:26)
 

А канонически Ваша задача решается так:
<?php

$array 
= array(1,2,3);

    if(
in_array(1,$array)) $block "first_block.php";
elseif(
in_array(2,$array)) $block "second_block.php";
elseif(
in_array(3,$array)) $block "third_block.php";
else                       
$block "rand_block.php";

    include 
$block;
?> 

  Ответить  
 
 автор: admiral   (19.12.2009 в 00:17)   письмо автору
 
   для: Trianon   (18.12.2009 в 23:56)
 

>Вы оптимальное решение ищете?
Ага.
>Нашли бы сперва просто работающее.
>То что у Вас написано, на работающее как-то не смахивает.
Я написал простое для меня решение. Только почему Вы думаете что на рабочее оно не смахивает? Я не спорю, что, возможно, упустил подводные камни, поэтому обращаюсь за помощью. И раз уж Вы, пологаете что это решение как-то не смахивает на робочее, пожалуйста аргументируйте ваше утверждение.
Или быть может я не совсем ясно поставил задачу?

>UPD.
>Сопоставление выполняется со всеми параллельно и одновременно. Если канонически.
Вот честно не понимаю некоторых ваших, хоть убейте)
Я исхожу из такого примера

<?

  
switch(1)
{
    case 
'1':
    
$block "Есть соответствие и это собщение напечатается";
    break;
    case 
'1':
    
$block "Есть соответствие и это собщение не напечатается";
    break;
}

    echo 
$block;
?>


В учебнике Котерова говорится, что если сопоставление обнаружено, то следующая и последующие строки во внимание не принимаются.

  Ответить  
 
 автор: neadekvat   (19.12.2009 в 00:24)   письмо автору
 
   для: admiral   (19.12.2009 в 00:17)
 

Конечно, вы же break; ставите.
Уберите break'и и у вас от первого совпадения и дальше попрет без остановки.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования