2014-12-18 3 views
1

정확하게 내 질문을 단순화하는 방법을 모르겠지만, 내 문제를 자세히 설명하려고했습니다. 하나의 배열을 2 차원 또는 다차원 배열 (예 : 하단)으로 변경하고 배열에 하나의 변수 (현재 범주 동일) 및 다른 변수 (현재 페이지 동일)를 확인하고 페이지가 범주의 일부인지 확인합니다 ?PHP : 동적 레이아웃에서 변수를 다차원 배열과 동일하게 만드는 방법은 무엇입니까?


근무 코드 :

나는 내가 아닌 I가하고 포함을 통해 (적절한 내용을 표시하려고 해요 페이지를 얻을 수 있습니다 아래의 작업 코드를 가지고 여기에 표시).

$path = ''; 
$category = $_GET['category']; 
$page = $_GET['page']; 
$content = array('home','about','work','contact','404','team','services'); 

if (!empty($page)) { 
    if(in_array($page,$content)) { 
     if (!empty($category)) { 
      $path = $category . '/' . $category . '_' . $page; 
     } else { 
      $path = 'content_' . $page; 
     } 
    }else { 
     $page = '404'; 
     $url = '/' . $page; 
     header('Location: ' . $url, true, 404); exit(); 
    } 
} 
else { 
    $page = 'home'; 
    $path = 'content_' . $page; 
} 

내 문제 : $page가 배열 $content에서 발견되는지를 확인 여기서

내 문제이다.

나는 같은 것을 할 필요가 :

$main = array('home','about','work','contact','404'); 
$secondary = array('team','services'); 

... 다음이에서 : 그 일을하더라도

 if (in_array($category,$main) && in_array($page,$secondary)) { 
      $path = $category . '/' . $category . '_' . $page; 
     } 

여전히 결함이있을 것입니다. $category == $main$page == $secondary이지만 $secondary이 현재 카테고리 아래에있는 페이지와 같지 않은 경우 페이지는 여전히 열리지 만 실제로 존재하지 않으므로 콘텐츠가 없습니다.

  • 카테고리에 대해 두 페이지, 팀 및 서비스가 있고 연락처 카테고리에도 두 페이지, 견적 및 지원이 있다고 가정 해 보겠습니다. $category/about 인 및 $page/team 결과가 올 것 URL을 /about/team 것 인과
  • $category == $main$page == $secondary하는 경우.
  • $category/about이고 $page/contact이면 기술적으로는 코드에 따라 기술적으로도 정확하지만 URL은 /about/contact이며 빈 페이지가 표시됩니다.

내 아이디어 :

나는 두 차원 배열이 더 좋을 것이라고 생각 해요? 내가 붙어있는 곳이야! 이 같은

뭔가 :

$content = array(
    array('Home'), 
    array('About','Team','Services'), 
    array('Work'), 
    array('Contact','Quote','Support'), 
    array('404') 
); 

또는이 :

$main = array('home','about','work','contact','404'); 
$secondary = array(
    array('About','Team','Services'), 
    array('Contact','Quote','Support') 
); 

더 이상 날로부터 정보를 필요로하는 경우에, 그냥 부탁드립니다. 모든 도움을 주시면 감사하겠습니다. 가장 좋은 방법은 무엇입니까? 최소한 내가 올바른 길을 가기 시작하면 감사하겠습니다!


편집 : 여기까지 우리가 가지고있는 것이 있습니다.

<?php 

    $path = ''; 
    $category = $_GET['category']; 
    $page = $_GET['page']; 

    function getUrl($category, $page) { 
     $pages = array(
      'home', 
      'about' => array('team', 'services'), 
      'work', 
      'contact' => array('quote', 'support'), 
      '404' 
     ); 

     if (!is_null($category)) { 
      if(array_key_exists($category, $pages) && in_array($page, $pages[$category])) { 
       return $category . '/' . $category . '_' . $page; 
      } 

      return '404'; 
     } else if (in_array($page, $pages)) { 
      return 'content_' . $page; 
     } 

     return '404'; 
    } 

      if($page == 'home'){ 
       // stuff for home here 
    }else if($page == 'about'){ 
       $page_title = 'About'; 
    }else if($page == 'work'){ 
       $page_title = 'Work'; 
    }else if($page == 'contact'){ 
       $page_title = 'Contact'; 
    }else if($page == '404'){ 
       $page_title = 'Oops! (404)'; 
       $path = 'content_404'; 
    } 
    $page_class = 'page-' . $page; 
    $web_url = "http://mrobertsdesign.ca"; 

    // Page Start 

    include('includes/header.php'); 
    include('content/' . $path . '.php'); 
    include('includes/footer.php'); 
?> 
+0

* 방법 * 너무 많은 정보 및 게시물의 너무 오래. 그것을 숙고하고 명확하고 간결한 질문을하십시오. – Madbreaks

+0

@Madbreaks가 지금 당장 감사 할 것입니다. – Matthew

답변

1

예, 2 차원 배열을 사용할 수 있습니다. 문제를 해결하는 열쇠는 연관 배열을 지원한다는 것입니다. 파이썬의 Dictionary 또는 Java의 Map과 비슷합니다 (Map과 달리 PHP 배열은 유형이 제한되어 있음).

원하는 경우 각 배열 항목에 $key => $value 쌍을 할당 할 수 있습니다. 이제 잠시 독서를 그만하고이 지식으로 문제를 해결할 수있는 방법에 대해 생각해보십시오. 당신이 그것을 얻을 수 있다면, 끝내; 그렇지 않다면 계속!

$key이 허용되는 범주 이름이고 $value은 해당 범주 (하위 배열)에 허용되는 페이지 집합 인 배열을 설정하려고합니다. 여기 (WriteCodeOnline에이 코드를 실행 해보십시오) 즉 보일 것이다 방법은 다음과 같습니다

function getUrl($category, $page) { 
    $pages = array(
     'home', 
     'about' => array('team', 'services'), 
     'work', 
     'contact' => array('quote', 'support'), 
     '404' 
    ); 

    if (!is_null($category)) { 
     if(array_key_exists($category, $pages) && in_array($page, $pages[$category])) { 
      return $category . '/' . $category . '_' . $page; 
     } 

     // Category doesn't exist or page for category not found 
     return '404'; 
    } else if (in_array($page, $pages)) { 
     return 'content_' . $page; 
    } 

    return '404'; 
} 


// Expected url: 'about/about_team' 
var_dump(getUrl('about', 'team')); 

// Expected url: 'contact/contact_quote' 
var_dump(getUrl('contact', 'quote')); 

// Expected url: 'content_home' - Page 'home' exists without category as a page 
var_dump(getUrl(null, 'home')); 

// Expected url: '404' - Page 'home' of category 'contact' does not exist. 
var_dump(getUrl('contact', 'home')); 

// Expected url: '404' - Page 'notexist' of category 'contact' does not exist. 
var_dump(getUrl('contact', 'notexist')); 

그래서 당신은 $category = 'about' 반면

... $category = 'about'$page = 'team'는 기존 페이지로 연결 볼 수 $page = 'contact'는 않을 것입니다.

참조 : http://php.net/array_key_exists

참조 : http://php.net/in_array

+0

고마워요, 제가 이것을 통합하여 약 3 시간 후에 테스트 할 것입니다. 내 comp. – Matthew

+0

@Matthew 어떤 업데이트/어떻게 되었습니까? – Mephoros

+0

나는 문자 그대로 방금 문에 들어갔다. 지금 당장 시도하려고한다! – Matthew

관련 문제