2015-04-27 40 views
1

我試圖把一個foreach()在交換機內。但我得到了以下錯誤代碼:開關()和foreach()問題在php

Parse error: syntax error, unexpected 'foreach' (T_FOREACH), expecting case (T_CASE) or default (T_DEFAULT) or '}' in /.../index.php on line 20

我現在是$_GET['']

$dir = 'content/'.$lang; 
    $scan = array_diff(scandir($dir), array('..','.')); 
    switch($page) { 
     foreach ($scan as $value){ 
     $value_ext_free = pathinfo($value, PATHINFO_FILENAME); 
      case $value_ext_free : 
       $page = $value_ext_free; 
       break; 
     } 

     default : 
      $page = 'welcome'; 
    } 

似乎很合乎邏輯的我得到$lang價值,但我不是一個PHP專家...任何想法?

編輯

我只是這個更新我的代碼:

$dir = 'content/'.$lang; 
    $scan = array_diff(scandir($dir), array('..','.')); 
    foreach ($scan as $value){ 
     $value_ext_free = pathinfo($value, PATHINFO_FILENAME); 
    } 
    if($page == $value_ext_free) { 
     include 'content/'.$lang.'/'.$page.'.php'; 
    } 
    else { 
     include 'content/'.$lang.'/welcome.php'; 
    } 

這幾乎是除了只有我的文件夾的最後一頁是工作在內容...工作:/

Thankssss! :) Katsele

+2

你需要指定交換機的foreach部分的情況。 http://php.net/manual/en/control-structures.switch.php – Maximus2012

+0

'switch($ page){case「something」: foreach($ scan as $ value){' – Maximus2012

+0

'case $ value_ext_free:'應該在foreach之外(與'break;'一起) – Maximus2012

回答

2

修正你更新的代碼:

$dir = 'content/'.$lang; 
$scan = array_diff(scandir($dir), array('..','.')); 
$default = true; 
foreach ($scan as $value){ 
    $value_ext_free = pathinfo($value, PATHINFO_FILENAME); 
    if ($page == $value_ext_free) { 
     include 'content/'.$lang.'/'.$page.'.php'; 
     $default = false; 
     break; 
    } 
} 
if ($default) { 
    include 'content/'.$lang.'/welcome.php'; 
} 
+0

它的工作原理!謝謝 :) – katsele

0

This method of implementation is dangerous and not recommended.

PHP Switch我敢肯定,你需要有一個令牌的情況下,像:

Case X,並在它裏面的語句塊。因此,它內部的每個塊。

好像你甚至不需要切換這個。

$dir = 'content/'.$lang; 
if(file_exists($dir . DIRECTORY_SEPARATOR . $GET['filename'])) 
    $page = $GET['filename']; 
else 
    $page = 'welcome'; 
+0

謝謝,但它似乎沒有考慮到'$ page'正在改變,每當我的' $ _GET ['']'是... :) – katsele

+0

@katsele啊,我想我得到了你在這裏想要達到的目標。將$ GET ['filename']替換爲您正在使用的變量。 –

1

case有直接開關旁

的foreach將爲陣列 如果我理解正確的話,你想要什麼的各項指標做一個迭代(代碼似乎並不對我來說非常合乎邏輯抱歉),你可能需要的東西以這種方式

$dir = 'content/'.$lang; 
$scan = array_diff(scandir($dir), array('..','.')); 

    foreach ($scan as $value){ 
     $value_ext_free = pathinfo($value, PATHINFO_FILENAME); 
     $page = $value_ext_free; 

    } 
    if(!isset($page)) 
     $page = 'welcome'; 
+0

我正在使用'$ _GET'來包含我的頁面內容。爲了避免出現錯誤的URL,我想列出所有的情況。我想出了一個'foreach()'和一個'switch()'來解決它......但它不起作用。我不知道是否清楚... – katsele

+0

好吧然後然後解決@sjagr似乎是你需要的 – CharybdeBE

0

switch語句使用以下語法

<?php 
switch ($variable) { 
    case 'value': 
     runFunction1('value'); 
     break; 

    case 'value2': 
     runFunction1('value2'); 
     break; 

    default: 
     runFunction1('default'); 
     break; 
} 
?>