2015-02-18 3 views
1

Я использую PHP для создания цикла с условием, но результат был не таким, каким я хочу.Как сделать PHP для цикла с условием?

Любая помощь, которую вы можете предоставить, была бы замечательной! :)

$cnt = array(
    "08.00","09.00","10.00" 
); 
$time = array(
    "07.00","08.00","09.00","10.00","11.00","12.00","13.00","14.00", 
    "15.00","16.00","17.00","18.00","19.00","20.00","21.00","22.00" 
); 

Это мой перекручивание код:

for ($i = 0; $i < 16 ; $i++) { 
    for ($j = 0; $j < 3 ; $j++) { 
     if ($time[$i] == $cnt[$j]) { 
      $button[$i] = 'disable'; 
     } else { 
      $button[$i] = $time[$i]; 
     } 
    } 
} 

Результат:

07.00 08.00 09.00 disable 11.00 12.00 13.00 14.00 15.00 16.00 17.00 18.00 19.00 20.00 21.00 22.00 

И результат я хочу:

07.00 disable disable disable 11.00 12.00 13.00 14.00 15.00 16.00 17.00 18.00 19.00 20.00 21.00 22.00 
+0

Я думаю, что вы есть много ответов здесь. Вы можете принять единственное, что, по вашему мнению, помогло вам больше всего и решило вашу проблему. (http://meta.stackexchange.com/q/5234) – Rizier123

ответ

3

Я хотел бы использовать что-то вроде этого:

$button = array(); 
foreach($time as $t) { 
    if(in_array($t, $cnt, true)) { 
     $button[]='disable'; 
    } else { 
     $button[]=$t; 
    } 
} 

В итерации цикла через все элементы массива $time и проверяет каждое значение, если массив $cnt содержит то же значение.

Поскольку вы добавили значения с инкрементирующими индексами, вы можете использовать оператор push массива []= для добавления значений в массив $ button.

Узнайте больше о in_array(): http://php.net/manual/en/function.in-array.php и []=: http://php.net/manual/en/function.array-push.php

0

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

for ($i=0; $i < 16 ; $i++) { 
    if(in_array($time[$i], $cnt) { 
      $button[$i]='disable'; 
    } else { 
      $button[$i]=$time[$i]; 
    } 
} 
3

Ваша логика ошибочна - вы зацикливаете на массиве $cnt и постоянно устанавливаете/заменяете свои отключенные/временные значения. Рассмотрим это:

$time -> looking at 08:00 

петлю на $ CNT:

08:00 -> matches -> set $button[$i] to disabled 
09:00 -> no match -> set $button[$i] to $time[$i] 
10:00 -> no match -> set $button[$i] to $time[$i] 

Ваша внутренняя петля разрушительно - вы только сохранить результат теста сравнения с последнего элемента в $ НКТ, поэтому ваш «раньше» результаты испытаний будут уничтожены.

То, что вы должны иметь это:

foreach($time as $idx => $val) { 
    if (in_array($val, $cnt)) { 
     $button[$idx] = 'disabled'); 
    } else { 
     $button[$idx] = $val; 
    } 
} 
-1

Просто добавьте 'перерыв;' во внутреннем цикле. Смотрите ниже,

 for ($i=0; $i < 16 ; $i++) { 
      for ($j=0; $j < 3 ; $j++) { 
       if($time[$i]==$cnt[$j]){ 
        $button[$i]='disable'; 
        break; 
       }else{ 
        $button[$i]=$time[$i]; 
       } 
      } 
     } 
0

Использование PHP in_array:

for ($i=0; $i < 16 ; $i++) { 
    if(in_array($time[$i], $cnt){ 
     $button[$i]='disable'; 
    }else{ 
     $button[$i]=$time[$i]; 
    } 
} 
1

Много ответов показать способы сделать это, но есть также функциональный подход:

$button = array_map(
    function ($item) use ($cnt) { 
     return in_array($item, $cnt) ? 'disable' : $item; 
    }, 
    $time 
); 
+1

Не так короче, как ваш ответ есть список ошибок, которые вы получите с этим – Rizier123

+0

@ Rizier123 Что вы имеете в виду? – hek2mgl

+0

@ hek2mgl Если вы посмотрите на первую ревизию своего ответа, вы увидите, что он не использовал 'global' и' use() '. Теперь волшебным образом он отправился в «global $ cnt;», а затем «use ($ cnt)». Интересно, откуда он получил это от – Rizier123

1

Это должно работать для вас:

(Здесь я просматриваю каждый элемент $time с array_map() и проверял если он находится в массиве $cnt с in_array().Если в массиве я заменить его на замену, когда я использую use() наследовать его от родительской области, и если не я снова присвоить значение)

<?php 

    $cnt = array("08.00", "09.00", "10.00"); 
    $time = array("07.00", "08.00", "09.00", "10.00", "11.00", "12.00", "13.00", "14.00", "15.00", "16.00", "17.00", "18.00", "19.00", "20.00", "21.00", "22.00"); 
    $replacement = "disabled"; 

    $time = array_map(function ($v) use ($cnt, $replacement) { 
     return (in_array($v, $cnt) ? $replacement : $v); 
    }, $time); 

    print_r($time); 

?> 

Выход:

Array ([0] => 07.00 [1] => disabled [2] => disabled [3] => disabled [4] => 11.00 [5] => 12.00 [6] => 13.00 [7] => 14.00 [8] => 15.00 [9] => 16.00 [10] => 17.00 [11] => 18.00 [12] => 19.00 [13] => 20.00 [14] => 21.00 [15] => 22.00) 
Смежные вопросы