Есть ли более эффективный способ кодирования этого условного оператора? Есть ли в PHP максимальное количество условных выражений? - PullRequest
0 голосов
/ 12 мая 2019

У меня есть список из примерно 100 географических названий, и первые 10 названий начинаются с цифры, которая, конечно, здесь считается строкой.Я хочу разделить цифры и каждую букву.Я попробовал это

if ($currentLetter == '0' || '1' || '2' || '3' ) etc. 

, но оно всегда возвращало true, даже если имя начиналось с буквы.

Код ниже работает, но мне кажется неэффективным, у любого есть более краткий способ написатьэтот?Есть ли максимальное количество времени, которое вы можете использовать ||в заявлении?

 $lastLetter = 'z';
while ( $the_query->have_posts() ) :
 $the_query->the_post();
 // Show Posts ...
    $currentLetter = strtolower(substr(get_the_title(), 0, 1));
    $slug = basename(get_permalink());
    $proj_title = get_the_title();
    if ($currentLetter === '0' || $currentLetter === '1' || $currentLetter == '2' || $currentLetter == '3' || $currentLetter == '4' || $currentLetter == '4' || $currentLetter == '5' || $currentLetter == '6' || $currentLetter == '7' || $currentLetter == '8' || $currentLetter == '9') {
        //do nothing if a number
    } else if ($currentLetter != $lastLetter) {
            echo '<div class="row" style="border:1px solid gray;float:left;margin-top:48px;width:100%;height:auto;clear:both;"><h3 style="text-transform:uppercase;">';
            echo $currentLetter;
            echo '</h3></div>';
            $lastLetter = $currentLetter;
    }
    echo '<a href="'.$slug.'">'.$proj_title.'</a><br/>';

 endwhile;

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Этот синтаксис недопустим, но в любом случае PHP предлагает множество разных способов сделать это.

Но вы можете использовать in_array(), чтобы сделать это более кратким:

if (in_array($currentLetter, [0,1,2,3,4,5,6,7,8,9])) {

}

Если буквы 0-9, вы можете использовать range() чтобы сократить это:

if (in_array($currentLetter, range(0,9))) {

}

Или вы можете просто проверить, является ли этот символ числовым.Есть много способов сделать это с помощью PHP.Здесь я использую ctype_digit() вы также можете использовать is_numeric().

if (ctype_digit($currentLetter)) {

}
0 голосов
/ 12 мая 2019

Вы можете использовать preg_match:

$string = "0eirieu";
if ( preg_match('/^[0-9]/', $string)) {
  echo "first is number\n";
}

Более конкретно:

...
$proj_title = get_the_title();
if ( preg_match('/^[0-9]/', $proj_title)) {
    //do nothing if a number
} else if ($currentLetter != $lastLetter) {
    echo '<div class="row" style="border:1px solid gray;float:left;margin-top:48px;width:100%;height:auto;clear:both;"><h3 style="text-transform:uppercase;">';
    echo $currentLetter;
    echo '</h3></div>';
    $lastLetter = $currentLetter;
}
...