foreach внутри if / else - PullRequest
       10

foreach внутри if / else

0 голосов
/ 01 августа 2011

В настоящее время у меня есть это

// display all address with their associated phone numbers
    foreach ($data->address as $address) {
      if ($address->fullAddress) echo $address->fullAddress;
      if ($address->phones->PhoneNumber) echo $address->phones->PhoneNumber);
    }

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

// display all phone numbers if there is not an address
    if ($data->relatedPhone) echo $data->relatedPhone;

Если ни одно из положений не выполнено, я вообще ничего не хочу отображать. Так как же я могу объединить два?

Ответы [ 4 ]

2 голосов
/ 01 августа 2011

вот простое быстрое решение:

$addrfound=false;
foreach ($data->address as $address) {
  if ($address->fullAddress) { echo $address->fullAddress; $addrfound=true; }
  if ($address->phones->PhoneNumber) { echo $address->phones->PhoneNumber); $addrfound=true; } 
}

if (!$addrfound)
    if ($data->relatedPhone) echo $data->relatedPhone;
0 голосов
/ 01 августа 2011

Вы можете создать флаг, чтобы указать, выполнено ли хотя бы одно из условий.

$flag = 0;
if (condition_1) {
  echo $output_1;
  $flag = 1;
}

if (condition_2) {
  echo $output_2;
  $flag = 1;
}

if (!$flag && condition_3) {
  echo $output_3;
}
0 голосов
/ 01 августа 2011

Вы должны структурировать свою логику в предложениях if, которые проще для вас обрабатывать:

// display all address with their associated phone numbers
foreach ($data->address as $address) 
{
    $hasAddress = (bool) $address->fullAddress;
    $hasPhone = (bool) $address->phones->PhoneNumber;
    $isAddress = ??; # add your decision here, I can't see you specified it in your question.

    if ($hasAddress) echo $address->fullAddress;
    if ($hasPhone) echo $address->phones->PhoneNumber;

    // display all phone numbers if there is not an address
    if (!$isAddress) {
        if ($data->relatedPhone) echo $data->relatedPhone;
    }
}
0 голосов
/ 01 августа 2011

Вы можете сделать else if вместо другого if:

if (foo) {
  echo "bar";
} else if (foo2) {
  echo "bar2";
} else {
  echo "foobar";
}

Последний else запускается, только если все другие операторы if оцениваются как ложные.

Так что в вашем случае, я бы попробовал это:

// display all address with their associated phone numbers
    foreach ($data->address as $address) {
      if ($address->fullAddress) {
        echo $address->fullAddress;
      } else if ($address->phones->PhoneNumber) {
        echo $address->phones->PhoneNumber;
      } else if ($data->relatedPhone) {
        echo $data->relatedPhone;
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...