2010-08-17 42 views
47

Tôi cho rằng nó không được phép vì tôi nhận được lỗi "Lỗi phân tích cú pháp: lỗi cú pháp, lỗi T_IF không mong muốn ...". Nhưng tôi không thể tìm ra cách để hoàn thành mục tiêu của mình. Đây là mã của tôi:nếu chặn câu lệnh echo bên trong?

<?php 

    $countries = $myaddress->get_countries(); 

    foreach($countries as $value){ 
    echo '<option value="'.$value.'"'.if($value=='United States') echo 'selected="selected"';.'>'.$value.'</option>'; 
    } 
    ?> 

Nó hiển thị danh sách các quốc gia trong phần tử được chọn và đặt Hoa Kỳ làm mặc định. Tôi không làm việc buồn bã ...

Trả lời

117

Bạn sẽ muốn sử dụng các một nhà điều hành ternary hoạt động như một rút ngắn NẾU/Else tuyên bố:

echo '<option value="'.$value.'" '.(($value=='United States')?'selected="selected"':"").'>'.$value.'</option>'; 
+0

+1. --- đánh tôi với nó. – sberry

+2

Vì vậy, đó là nơi toán tử bậc ba hữu ích. Đó là nhanh chóng, cảm ơn rất nhiều! – Joann

+0

Nó không phải là "sở thích của tôi" trong các tình huống như thế này. Tôi thích toán tử ternary cho các biến mặc định/thiết lập. Nhưng cho rằng đó là những gì bạn hỏi, có cách bạn làm điều đó :) –

8

Sử dụng một ternary operator:

echo '<option value="'.$value.'"'.($value=='United States' ? 'selected="selected"' : '').'>'.$value.'</option>'; 

Và trong khi bạn ở đó, bạn có thể sử dụng printf để làm cho mã của bạn dễ đọc hơn/dễ quản lý hơn:

printf('<option value="%s" %s>%s</option>', 
    $value, 
    $value == 'United States' ? 'selected="selected"' : '' 
    $value); 
8

Bạn luôn có thể sử dụng cú pháp (<condition> ? <value if true> : <value if false>) (được gọi là ternary operator - nhờ Dấu để sửa lại cho tôi :)).

Nếu <condition> là đúng, tuyên bố sẽ được đánh giá là <value if true>. Nếu không, nó sẽ được đánh giá là <value if false>

Ví dụ:

$fourteen = 14; 
$twelve = 12; 
echo "Fourteen is ".($fourteen > $twelve ? "more than" : "not more than")." twelve"; 

Đây là giống như:

$fourteen = 14; 
$twelve = 12; 
if($fourteen > 12) { 
    echo "Fourteen is more than twelve"; 
}else{ 
    echo "Fourteen is not more than twelve"; 
} 
+0

Được gọi là toán tử bậc ba. – sberry

+0

Như @Gumbo đã chỉ ra, đây chỉ là một toán tử bậc ba, không phải là "the". "Một thuật ngữ phổ biến khác là toán tử điều kiện." – strager

6

Trong lợi ích của khả năng đọc nó phải được cái gì đó như

<?php 
    $countries = $myaddress->get_countries(); 
    foreach($countries as $value) { 
    $selected =''; 
    if($value=='United States') $selected ='selected="selected"'; 
    echo '<option value="'.$value.'"'.$selected.'>'.$value.'</option>'; 
    } 
?> 

mong muốn mọi thứ mọi thứ trong một dòng là một người đàn ông chết. Viết rõ ràng.

Nhưng có một cách khác, một cách tốt hơn. Không cần sử dụng tiếng vọng chút nào. Tìm hiểu cách sử dụng các mẫu . Chuẩn bị dữ liệu của bạn trước và chỉ hiển thị dữ liệu sau đó sẵn sàng. phần logic

kinh doanh:

$countries = $myaddress->get_countries(); 
$selected_country = 1;  

Template phần:

<? foreach($countries as $row): ?> 
<option value="<?=$row['id']?>"<? if ($row['id']==$current_country):> "selected"><? endif ?> 
    <?=$row['name']?> 
</option> 
<? endforeach ?> 
Các vấn đề liên quan