Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите с парсером файла
 
 автор: Bvz   (29.12.2010 в 15:03)   письмо автору
 
 

есть файл menu.tpl

menu-navigation
menu-left
menu-right

мне нужно его пропарсить, чтоб получился ледующий массив

Array
(
    [0] => navigation

    [1] => left

    [2] => right
)


сам парсер parsr.php

<?php
$menu 
file_get_contents ("menu.tpl");
$position explode("menu-"$menu);
echo 
"<pre>";
print_r ($position);
echo 
"</pre>";
?>


на выходе получается следующий массив:

Array
(
    [0] => 
    [1] => navigation

    [2] => left

    [3] => right
)


не могу понять откуда здесь появился пустой элемент массива, как сделать, чтоб его не было?

  Ответить  
 
 автор: Gubichev   (29.12.2010 в 15:12)   письмо автору
 
   для: Bvz   (29.12.2010 в 15:03)
 

Потому что перед разделителем "menu-" у вас нет никаких символов, потому и пустой элемент.

  Ответить  
 
 автор: Bvz   (29.12.2010 в 15:17)   письмо автору
 
   для: Gubichev   (29.12.2010 в 15:12)
 

понял, а как убрать из массива пустой элемент?

  Ответить  
 
 автор: psychomc   (29.12.2010 в 15:21)   письмо автору
 
   для: Bvz   (29.12.2010 в 15:17)
 

unset

  Ответить  
 
 автор: Bvz   (29.12.2010 в 15:23)   письмо автору
 
   для: psychomc   (29.12.2010 в 15:21)
 

т.е. специальной функции нет, которая ишет и удаляет его?

  Ответить  
 
 автор: sim5   (29.12.2010 в 15:30)   письмо автору
 
   для: Bvz   (29.12.2010 в 15:23)
 

Что значит "специальной"?

  Ответить  
 
 автор: Bvz   (29.12.2010 в 15:41)   письмо автору
 
   для: sim5   (29.12.2010 в 15:30)
 

ну встроенной в язык php

сделал так:

for ( $i=0; $i<count($position); $i++)
{
  if (empty ($position[$i]))
  {
    unset ($position[$i]);
  }
}


и еще вопрос, а как обрезать длинную строку например по некоторому набору символов?

  Ответить  
 
 автор: sim5   (29.12.2010 в 15:46)   письмо автору
 
   для: Bvz   (29.12.2010 в 15:41)
 

Встроено что? Что оно должно делать? Зачем цикл?

  Ответить  
 
 автор: Bvz   (29.12.2010 в 15:47)   письмо автору
 
   для: sim5   (29.12.2010 в 15:46)
 

а как без цикла перебрать весь массив?

  Ответить  
 
 автор: sim5   (29.12.2010 в 15:49)   письмо автору
 
   для: Bvz   (29.12.2010 в 15:47)
 

А вы разве в цикле занимаетесь преобразованием массива? Вы зачем создавали тему "как научиться думать программистически"? Думайте.

  Ответить  
 
 автор: Bvz   (29.12.2010 в 15:55)   письмо автору
 
   для: sim5   (29.12.2010 в 15:49)
 

это в explode нужно третий аргумент ввести?

  Ответить  
 
 автор: sim5   (29.12.2010 в 16:00)   письмо автору
 
   для: Bvz   (29.12.2010 в 15:55)
 

Не знаю о каком аргументе вы ведете речь, а тем более чем он может помочь.

  Ответить  
 
 автор: Bvz   (29.12.2010 в 16:05)   письмо автору
 
   для: sim5   (29.12.2010 в 16:00)
 

еще есть функция in_array

  Ответить  
 
 автор: sim5   (29.12.2010 в 16:11)   письмо автору
 
   для: Bvz   (29.12.2010 в 16:05)
 

И что? Есть еще масса функций работы с массивами, но зачем их тут перечислять?

  Ответить  
 
 автор: Bvz   (29.12.2010 в 16:13)   письмо автору
 
   для: sim5   (29.12.2010 в 16:11)
 

я спрашиваю она подойдет? я просто не понимаю, а как она вернет ключ элемента массива
вот нашел, правда немного грамоздко

if (array_search(NULL, $position));
{
  $key = array_search(NULL, $position);
  unset ($position[$key]);
}

  Ответить  
 
 автор: sim5   (29.12.2010 в 16:27)   письмо автору
 
   для: Bvz   (29.12.2010 в 16:13)
 

Вы хотите научиться программировать, для этого собираетесь научиться мыслить соответственно. Зачем тогда вы спрашиваете подойдет она или нет меня? Нет, не подойдет, и array_search тут вообще не нужен.
Прежде чем городить все это, вы лучше проанализируйте свой файл, и подумайте сколько пустых значений будет в полученном массиве, и где будут они расположены в нем. Да и вообще, может быть лучше иначе свои шаблоны описывать, чтобы не заниматься ненужным?

  Ответить  
 
 автор: Bvz   (29.12.2010 в 16:32)   письмо автору
 
   для: sim5   (29.12.2010 в 16:27)
 

тут бес пустого значения не обойтись, хотя можно попробовать и без него, это идея :)
теперь вы меня всегда будете пинать этим
Вы хотите научиться программировать )))

немного ненужных задачек решил, мозги поразмял, да я долго ломал голову над организацией файла, сейчас родилась идея, и все стало на места, спасибо!

  Ответить  
 
 автор: sim5   (29.12.2010 в 16:34)   письмо автору
 
   для: Bvz   (29.12.2010 в 16:32)
 

Вы уверены, что не обойтись?
К чему вообще нужен такой шаблон, из которого только имена чего-то получить можно, что гороздо логичнее держать в базе?
Я вас не пинаю, но думать надо, иначе бросайте все к чертовой матери и в швеи-мотористы.

  Ответить  
 
 автор: psychomc   (29.12.2010 в 17:11)   письмо автору
 
   для: sim5   (29.12.2010 в 16:34)
 

сим5 брутален 8-)

  Ответить  
 
 автор: Bvz   (29.12.2010 в 18:21)   письмо автору
 
   для: sim5   (29.12.2010 в 16:34)
 

вот как пойму, как надо думать иначе, там и буду :)

  Ответить  
 
 автор: Trianon   (29.12.2010 в 19:00)   письмо автору
 
   для: Bvz   (29.12.2010 в 18:21)
 

Я бы посоветовал поглядеть в сторону функции preg_match_all()
Шаблон ^menu-(.*)$ довольно близко описывает то, что Вы хотите добыть.
Array ( [0] => navigation [1] => left [2] => right ) получается за два оператора, один из которых вызов функции.
Безо всяких циклов. И вызов функции - единственный. То есть никакие другие функции не нужны.

  Ответить  
 
 автор: sim5   (29.12.2010 в 19:56)   письмо автору
 
   для: Bvz   (29.12.2010 в 18:21)
 

Молча думать надо.
У вас не моет быть после explode пустых элементов ни в середине, ни в конце массива, если конечно вы сами текст не напишите этому сопутствующий. У вас только в начале может быть пустой элемент, а почему, вам ранее сказали. Это значит, что без всяких циклов можно сразу обращаться к элементу массива с индексом 0, чтобы его удалить. Это видно и из вывода массива, который вы делали, да и вообще сразу и ежу понятно.
Ничего тут заумного нет, надо просто думать, и для этого обыкновенных мозгов хватит, а не специальных программерских, достаточно только вникнуть в описание функции.
А вот что такое шаблон и для чего нужен он надо подумать основательно.

  Ответить  
 
 автор: Bvz   (29.12.2010 в 20:59)   письмо автору
 
   для: sim5   (29.12.2010 в 19:56)
 

да в процессе понимание приходит )) еще раз спасибо!
делать, ошибаться, переделывать ))

  Ответить  
 
 автор: psychomc   (29.12.2010 в 19:56)   письмо автору
 
   для: Bvz   (29.12.2010 в 18:21)
 

думаю что для начала надо не понять как думать или не думать, а просто досконально изучить язык.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования