Меню на 30 гиг? На самом деле ТСу читать из файла не надо. Меню в коде – более чем норм., если ТС не «управляет» им как пользователь 24 часа в сутки. --- Добавлено --- P.S. Еще можно закешировать меню в готовом виде, т.е. в виде HTML-кода, взяв его из массива. --- Добавлено --- P.P.S. Можно, конечно, и из БД подгрузить, чтобы сделать кеш. Но если хранить всякую чухню в БД, получится WP
Спасибо доктор! PHP: $lines = file('menu.csv', FILE_IGNORE_NEW_LINES); foreach($lines as $value) { list($var1, $var2) = explode(';', $value); $new_array[$var1] = $var2; }
PHP: foreach($lines as $value2) { $arrlink = explode(';', $value2); $new_array2[]=$arrlink[1]; } print_r($new_array2); а так будет выводить только but1 but2 but3 и.т.д. верно? --- Добавлено --- только PHP: $new_array2[]=$arrlink[1]; почему как если убрать скобки [... ] PHP: $new_array2=$arrlink[1]; появляется последнее значение but4 массив PHP: $rems = array('but1','but2','but3','but4');
Потому, что использование этих скобок, это еще один, удобный способ создание\заполнения массива в переменную. Используют его, как правило, в цикле. То есть Код (Text): $var = 'val'; создаст переменную содержащую строку, а Код (Text): $var[] = 'val'; добавит в переменную содержащую массив, новый элемент. Если же этой переменной не было, или она содержала что-то другое, а не массив(например строку 'val'), то перезапишет его Вот почитайте https://www.php.net/manual/ru/language.types.array.php --- Добавлено --- Перед циклом, для повышения читабельности кода, и уверенности в том, что массив не будет содержать ничего лишнего, желательно объявить массив традиционным способом. Код (Text): $var = array(); foreach(...
т.е. получается PHP: $var[] = 'val'; то что пустые скобки это безопасно. может кому пригодится менюшка PHP: <?php define('KEY', true); if(!defined('KEY')) { header('HTTP/1.1 404 Not Found'); exit(file_get_contents(HOST.'404.html')); } define('ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']).'/'); define('HOST', 'http://'.$_SERVER['HTTP_HOST'].'/'); $lines = file('menu.csv', FILE_IGNORE_NEW_LINES); //$rems = array('but1','but2','but3','but4'); foreach($lines as $value2) { $arrlink = explode(';', $value2); $new_array2[]=$arrlink[1]; } $rems=$new_array2;//print_r($new_array2); /*$linkes = array( "1111111" => 'but1', "222222" => 'but2', "333333" => 'but3', "4444444" => 'but4' );*/ foreach($lines as $value) { list($var1, $var2) = explode(';', $value); $new_array[$var1] = $var2; } $linkes=$new_array; function getMenu() { global $linkes; foreach($linkes as $key => $value) { $links .= "<a href=\"".HOST.$value."\">".$key."</a>\n"; } return $links; } $rem = isset($_GET['rem'])?$_GET['rem']:false; if (!isset($_GET['rem'])) { $rem = 'home'; } elseif (in_array($_GET['rem'], $rems )) { $rem = $_GET['rem']; } else { header('HTTP/1.1 404 Not Found'); exit(file_get_contents(HOST.'404.html')); } switch($rem) { case 'but1' : $file = 'home.php'; $title = 'Главная'; break; case 'but2' : $file = 'reg.php'; $title = '3333333'; break; case 'but3' : $file = 'search.php'; $title = '3333333'; break; case 'but4' : $file = 'contact.php'; $title = '3333333'; break; default: $file = 'home.php'; $title = 'Главная'; break; } echo getMenu(); include_once ROOT.'tpl/'.$file; ?> здесь: PHP: $rems = array('but1','but2','but3','but4'); и $linkes = array( "1111111" => 'but1', "222222" => 'but2', "333333" => 'but3', "4444444" => 'but4' ); мы заменили. спасибо Drunkenmunky теперь в for ом PHP: case 'but4' : $file = 'contact.php'; $title = '3333333'; break; и готово. --- Добавлено --- Еще раз СПАСИБО!
Читать меню из файла и хардкодить контент страниц типа тайтла? Шо за tpl? Контент (кроме тайтла) тоже в «шаблоне» храните? Шаблон не должен хранить контент или сам за ним куда-то лезть, он должен его получать, как тайтл. Почитайте про MVC. P.S. $rems вместе со switch case(s) – это уже перебор. Достаточно массива и поиска в нем по ключу (такой поиск выполняется гораздо быстрее): http://phpforum.su/index.php?showtopic=94970 (см. второй-третий посты).