За последние 24 часа нас посетили 30654 программиста и 1795 роботов. Сейчас ищут 1249 программистов ...

запись данных в массив

Тема в разделе "PHP для новичков", создана пользователем leon2009, 12 авг 2022.

  1. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Развивайте мысль.
     
    leon2009 нравится это.
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Меню на 30 гиг? :eek:

    На самом деле ТСу читать из файла не надо. Меню в коде – более чем норм., если ТС не «управляет» им как пользователь 24 часа в сутки.
    --- Добавлено ---
    P.S. Еще можно закешировать меню в готовом виде, т.е. в виде HTML-кода, взяв его из массива.
    --- Добавлено ---
    P.P.S. Можно, конечно, и из БД подгрузить, чтобы сделать кеш. Но если хранить всякую чухню в БД, получится WP :)
     
  3. leon2009

    leon2009 Активный пользователь

    С нами с:
    1 янв 2015
    Сообщения:
    104
    Симпатии:
    0
    Спасибо доктор!
    PHP:
    1. $lines = file('menu.csv', FILE_IGNORE_NEW_LINES);
    2. foreach($lines as $value)
    3. {
    4.   list($var1, $var2) = explode(';', $value);
    5.   $new_array[$var1] = $var2;
    6. }
     
  4. leon2009

    leon2009 Активный пользователь

    С нами с:
    1 янв 2015
    Сообщения:
    104
    Симпатии:
    0
    PHP:
    1. foreach($lines as $value2)
    2. {
    3.   $arrlink = explode(';', $value2);
    4.   $new_array2[]=$arrlink[1];
    5. }
    6. print_r($new_array2);
    а так будет выводить только but1 but2 but3 и.т.д. верно?
    --- Добавлено ---
    только
    PHP:
    1. $new_array2[]=$arrlink[1];
    почему как если убрать скобки [... ]
    PHP:
    1. $new_array2=$arrlink[1];
    появляется последнее значение but4
    массив
    PHP:
    1. $rems = array('but1','but2','but3','but4');
     
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Потому, что использование этих скобок, это еще один, удобный способ создание\заполнения массива в переменную. Используют его, как правило, в цикле.
    То есть
    Код (Text):
    1. $var = 'val';
    создаст переменную содержащую строку, а
    Код (Text):
    1. $var[] = 'val';
    добавит в переменную содержащую массив, новый элемент. Если же этой переменной не было, или она содержала что-то другое, а не массив(например строку 'val'), то перезапишет его
    Вот почитайте
    https://www.php.net/manual/ru/language.types.array.php
    --- Добавлено ---
    Перед циклом, для повышения читабельности кода, и уверенности в том, что массив не будет содержать ничего лишнего, желательно объявить массив традиционным способом.
    Код (Text):
    1. $var = array();
    2. foreach(...
     
  6. leon2009

    leon2009 Активный пользователь

    С нами с:
    1 янв 2015
    Сообщения:
    104
    Симпатии:
    0
    т.е. получается
    PHP:
    1. $var[] = 'val';
    то что пустые скобки это безопасно.
    может кому пригодится менюшка
    PHP:
    1. <?php
    2. define('KEY', true);
    3. if(!defined('KEY'))
    4. {
    5.     header('HTTP/1.1 404 Not Found');
    6.     exit(file_get_contents(HOST.'404.html'));
    7. }
    8. define('ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']).'/');
    9. define('HOST', 'http://'.$_SERVER['HTTP_HOST'].'/');
    10.  
    11.  
    12. $lines = file('menu.csv', FILE_IGNORE_NEW_LINES);
    13. //$rems = array('but1','but2','but3','but4');
    14. foreach($lines as $value2)
    15. {
    16.   $arrlink = explode(';', $value2);
    17.   $new_array2[]=$arrlink[1];
    18. }
    19. $rems=$new_array2;//print_r($new_array2);
    20.  
    21. /*$linkes = array(
    22.                 "1111111"    => 'but1',
    23.                 "222222"    => 'but2',
    24.                 "333333"    => 'but3',
    25.                 "4444444"    => 'but4'
    26.                 );*/
    27. foreach($lines as $value)
    28. {
    29.   list($var1, $var2) = explode(';', $value);
    30.   $new_array[$var1] = $var2;
    31. }
    32.  
    33. $linkes=$new_array;              
    34.                
    35.                
    36. function getMenu()
    37. {
    38.     global $linkes;
    39.     foreach($linkes as $key => $value)
    40.     {
    41.         $links .= "<a href=\"".HOST.$value."\">".$key."</a>\n";
    42.         }
    43.         return $links;
    44.         }
    45. $rem = isset($_GET['rem'])?$_GET['rem']:false;
    46. if (!isset($_GET['rem']))
    47. {
    48.     $rem = 'home';
    49. }
    50. elseif (in_array($_GET['rem'], $rems ))
    51. {
    52.     $rem = $_GET['rem'];
    53. }
    54. else
    55. {
    56.     header('HTTP/1.1 404 Not Found');
    57. exit(file_get_contents(HOST.'404.html'));
    58. }
    59.     switch($rem)
    60. {
    61. case 'but1' :
    62.     $file  = 'home.php';
    63.     $title = 'Главная';
    64. break;
    65.  
    66. case 'but2' :
    67.     $file  = 'reg.php';
    68.     $title = '3333333';
    69. break;
    70.  
    71. case 'but3' :
    72.     $file  = 'search.php';
    73.     $title = '3333333';
    74. break;
    75. case 'but4' :
    76.     $file  = 'contact.php';
    77.     $title = '3333333';
    78. break;
    79. default:
    80.     $file  = 'home.php';
    81.     $title = 'Главная';
    82. break;
    83. }
    84. echo getMenu();
    85. include_once ROOT.'tpl/'.$file;
    86. ?>
    здесь:
    PHP:
    1. $rems = array('but1','but2','but3','but4');
    2. и
    3. $linkes = array(
    4.                 "1111111"    => 'but1',
    5.                 "222222"    => 'but2',
    6.                 "333333"    => 'but3',
    7.                 "4444444"    => 'but4'
    8.                 );
    мы заменили. спасибо
    Drunkenmunky

    теперь в for ом
    PHP:
    1. case 'but4' :
    2.     $file  = 'contact.php';
    3.     $title = '3333333';
    4. break;
    и готово.
    --- Добавлено ---
    Еще раз СПАСИБО!
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Читать меню из файла и хардкодить контент страниц типа тайтла? :)

    Шо за tpl? Контент (кроме тайтла) тоже в «шаблоне» храните? Шаблон не должен хранить контент или сам за ним куда-то лезть, он должен его получать, как тайтл. Почитайте про MVC.

    P.S. $rems вместе со switch case(s) – это уже перебор. Достаточно массива и поиска в нем по ключу (такой поиск выполняется гораздо быстрее): http://phpforum.su/index.php?showtopic=94970 (см. второй-третий посты).
     
    #32 miketomlin, 30 авг 2022
    Последнее редактирование: 30 авг 2022