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

Форум PHP

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

 

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

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

тема: Вывод многомерного массива через шаблонизатор
 
 автор: t4f   (15.02.2007 в 15:07)   письмо автору
 
 

Здравствуйте! Решил шаблонайзер свой написать... Почти написал, но возникла трабла с выводом многомерных массивов.
Вот есть массив (как в предыдущем моем сабже)

<?
$array 
= array(
    array(
"id"=>"id-1""info"=>"test-1"),
    array(
"id"=>"id-2""info"=>"test-2"),
    array(
"id"=>"id-3""info"=>"test-3")
    );
?>


Вот шаблон, который должен по идее представлять этот массив

<multy_array name="zxc">
<value name="id" /> || <value name="info" /><br />
</multy_array name="zxc">


Вот собственно класс

<? 
class Template
{
private 
$template "";
    
private 
$multyArray = array();
    
public function 
__construct($template)
{
$this->template = (is_file($template) && is_readable($template))?file_get_contents($template):"";
}
    
public function 
LoadMultyArray($multyArray$name)
{
$this->multyArray[$name] = $multyArray;
}
    
public function 
OutPut()
{
$this->parseMultyArray();
return 
$this->template;
}
private function 
parseMultyArray()
{
foreach(
$this->multyArray as $key=>$val)
{
    
$startTag "<multy_array name=\"$key\">";
    
$endTag "</multy_array name=\"$key\">";
    
$pattern "|".$startTag."(.*?)".$endTag."|is";
    
preg_match($pattern$this->template$out);
    
$i 0;
    foreach(
$val as $array)
    {
        foreach(
$array as $k=>$v)
        {
            
$i++;
        
$bodyTag[] = array("name"=>"<value name=\"$k\" />""value"=>$v);
        }
        
$whileText.=str_replace($bodyTag[$i]['name'],$bodyTag[$i]['value'],$out[1]);
                
        }
    
$this->template str_replace($out[0], $whileText$this->template);
        }
    }
}
?>


Тело метода parseMultyArray() неправильно все обрабатывает. Помогите исправить этот метод, чтобы он корректно обрабатывал шаблон.

   
 
 автор: cheops   (15.02.2007 в 16:23)   письмо автору
 
   для: t4f   (15.02.2007 в 15:07)
 

Не правильно это как? Сопровождается ли это какими-нибудь эффектами?

   
 
 автор: t4f   (15.02.2007 в 16:27)   письмо автору
 
   для: cheops   (15.02.2007 в 16:23)
 

Т.е. заменяет, но...
Вот еще одна переработка этого метода

    private function parseMultyArray()
    {
        foreach($this->multyArray as $key=>$val)
        {
            $startTag = "<multy_array name=\"$key\">";
            $endTag = "</multy_array name=\"$key\">";
            $pattern = "|".$startTag."(.*?)".$endTag."|is";
            preg_match($pattern, $this->template, $out);
            foreach($val as $array)
            {
                foreach($array as $k=>$v)
                {
                    $bt[] = array("<value name=\"$k\" />", $v);
                }
            }
        }
        foreach($bt as $tb)
        {
            $whileText.=str_replace($tb[0],$tb[1],$out[1]);
        }
        $this->template = str_replace($out[0], $whileText, $this->template);
    }


вот его вывод. У меня все попытки сводятся к такому выводу.

id-1 || <value name="info" /><br />

<value name="id" /> || test-1<br />

id-2 || <value name="info" /><br />

<value name="id" /> || test-2<br />

id-3 || <value name="info" /><br />

<value name="id" /> || test-3<br />


А нужен такой:

id-1 ||  test-1<br />

id-2 || test-2<br />

id-3 || test-3<br />

   
 
 автор: t4f   (16.02.2007 в 11:01)   письмо автору
 
   для: t4f   (15.02.2007 в 16:27)
 

Тему можно закрывать. Я нашел правильное решение.

private function parseMultyArray()
{
    foreach($this->multyArray as $key=>$val)
    {
        $startTag = "<multy_array name=\"$key\">";
        $endTag = "</multy_array name=\"$key\">";
        $pattern = "|".$startTag."(.*?)".$endTag."|is";
        preg_match($pattern, $this->template, $out);
        $keys = array_keys($val);
        $сnt = count($keys);
        for($i=0; $i<$сnt; $i++)
        {
            $tempText = $out[1];
            foreach($val[$keys[$i]] as $k=>$v)
            {
                $tempText = str_replace("<var name=\"$k\" />", $v, $tempText);
            }
            $newText .= $tempText;
        }
        $this->template = str_replace($out[0], $newText, $this->template);
    }
}


   
Rambler's Top100
вверх

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