PHP, заменяющий FOREACH на EACH в цикле die () - PullRequest
0 голосов
/ 29 февраля 2012

Эй, ребята, я работаю над частью своей функции и стараюсь сделать ее немного чище

Я пытался использовать if(each($ar['error']!=0)) для запуска этого через FOREACH цикл, но не могу заставить его работать правильно. Может быть, второй взгляд на это и некоторые другие мысли?

Вот как это сейчас

foreach($ar['error'] as $err) {
    if($err!=0) { 
        switch($err) {
            case 1: $this->doDie($this->errors['upl-ini-max']);     exit; break;
            case 2: $this->doDie($this->errors['upl-maxsize']);     exit; break;
            case 3: $this->doDie($this->errors['upl-partial']);     exit; break;
            case 4: $this->doDie($this->errors['upl-no-file']);     exit; break;
            case 6: $this->doDie($this->errors['upl-no-tmpDir']);   exit; break;
            case 7: $this->doDie($this->errors['upl-cant-write']);  exit; break;
            case 8: $this->doDie($this->errors['upl-ext']);         exit; break;
        }
    }
}

и я пытался сделать что-то вроде

include('class/debug.class.php');
$ar['error'][3]=1;

    if($ar['error']['value']!=0) { 
        switch($ar['error']['value']) {
            case 1: $this->doDie($this->errors['upl-ini-max']);     exit; break;
            case 2: $this->doDie($this->errors['upl-maxsize']);     exit; break;
            case 3: $this->doDie($this->errors['upl-partial']);     exit; break;
            case 4: $this->doDie($this->errors['upl-no-file']);     exit; break;
            case 6: $this->doDie($this->errors['upl-no-tmpDir']);   exit; break;
            case 7: $this->doDie($this->errors['upl-cant-write']);  exit; break;
            case 8: $this->doDie($this->errors['upl-ext']);         exit; break;
        }
    }

debug($ar);

//debug
'error' => 
  array (
    0 => 0,
    1 => 0,
    2 => 0,
    3 => 1,
    4 => 0,
    5 => 0,
    6 => 0,
    7 => 0,
),

Но похоже, что он никогда не ловит 1?

Ответы [ 4 ]

1 голос
/ 28 декабря 2016

Пара заметок: Ваши массивы и ваши условные операторы не совпадают. $ar['error'] заполнено 7 значениями. Только один из 7 является «истинным» -> 1, остальные - нули. Вам нужно утверждение foreach

foreach($array['error'] as $errorTest){
   switch($errorTest) {
      case 1: $this->doDie($this->errors['upl-ini-max']);     exit; break;

и т.д.

Ваш код показывает, что вы тестируете $ar['error']['value']. Эта переменная, по-видимому, не существует, поэтому тест переключателя не пройден.

Поскольку вы вставили значение ошибки в массив - по непонятной причине - вам нужно будет each пройти через все элементы массива.

К вашему сведению, поскольку вы заполняете $ ar ['error'] [3] = 1`, мой исправленный оператор switch выше всегда будет разрываться в случае 1 (ошибки ['upl-ini-max']).

Но я думаю, что вы ДЕЙСТВИТЕЛЬНО хотите, чтобы он сломался в случае 3.

Подумайте, нужна ли здесь ошибка array . Более простым решением было бы поместить код ошибки в одну переменную $errorCode=3 и включите эту переменную.

$errorCode=3;
switch($errorCode){
  case 1: dosomething(1); break;

Тестируя переменную вместо массива, так как вы не each просматриваете массив, вам не понадобится конструкция exit; break в вашем примере кода. Вы можете просто break;.

0 голосов
/ 29 февраля 2012

Если вы просматриваете массив с помощью each(), это обычно делается в сочетании с функцией list() в цикле while. Так что, если вы пытаетесь избежать цикла foreach(), это другая возможность.

while(list($key, $val) = each($arr)) {
   ...
}

Ознакомьтесь с документацией для each() http://php.net/manual/en/function.each.php

0 голосов
/ 30 сентября 2012

Я не совсем понимаю, что вы пытаетесь сделать здесь, но если вы пытаетесь проверить, является ли массив пустым, вы можете просто использовать if (empty ($ arrayName))

примерно так:

if(empty($yourArray))
{echo"<p>There's nothing in the array.....</p>";}
else
{
foreach ($yourArray as $current_array_item)
{
//do something with the current array item here
} 
}
0 голосов
/ 29 февраля 2012

$ar['error'] представляется массивом. Вы не можете ожидать, что switch($ar['error']) будет соответствовать любому из ваших операторов case, которые являются целыми числами. Вы должны switch на основе скалярного значения.

...