Страница 1 из 1

[PHP] массивы. нужна идея

Добавлено: 2008-11-29 0:03:02
Alex Keda
как делаю щас.
есть кусок HTML кода в отдельном файле, типа

Код: Выделить всё

hosting$ more file.tpl

<tr>
 <td><!-- value1 --></td>
</tr>
<tr>
 <td><!-- value2 --></td>
</tr>
создаём первый массив, типа

Код: Выделить всё

$arr_search = array();
$arr_search[] = "<!-- value1 -->";
$arr_search[] = "<!-- value2 -->";
второй массив

Код: Выделить всё

$arr_replace = array();
$arr_replace[] = "ceil 1";
$arr_replace[] = "ceil2";
считываем файл в переменную $file
==========
теперь делаем комбинацию:

Код: Выделить всё

echo str_replace($arr_search, $arr_replace, $file);
на выходе получим:

Код: Выделить всё

<tr>
 <td>ceil 1</td>
</tr>
<tr>
 <td>ceil2</td>
</tr>
==============
собсно проблема. необходимо следить за последовательностью заполнения массивов.
если поменять строки местами:

Код: Выделить всё

$arr_replace = array();
$arr_replace[] = "ceil2";
$arr_replace[] = "ceil 1";
результат будет иным.
на больших массивах в несколько десятков позиций становиться тяжело....
как бы сделать чтоб не следить?

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 0:07:40
hizel
эм, у вас там в пыхе хэши( в терминах perl-а) присутствуют?

Код: Выделить всё

$a{'value 1'} = 'ceil 1'

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 0:17:38
Alex Keda
незнаю, да и идея непонятна....

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 13:48:38
lerryc
lissyara писал(а):незнаю, да и идея непонятна....
Лисс, это шутка была?
что-то не догнал ;(
Ты же делал подобное вроде недавно? (месяц-два назад)
хеш-массив, зачем два массива? (в первом посте)
или все-таки новогдняя шутка?

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 22:28:17
Alex Keda
неа.
видать возрастное - начинаю всё забывать.
=========
объясните чтолли идею....

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 22:36:02
zg
hizel писал(а):эм, у вас там в пыхе хэши( в терминах perl-а) присутствуют?
ага, и даже функция, которая по хешу замену делает в сотни раз эффективней str_replace

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 22:48:06
Alex Keda
э... поделитесь знанием, люди...

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 22:54:22
zg
lissyara писал(а):э... поделитесь знанием, люди...
дык вроде дывным давно делился
http://anton-pribora.ru/articles/php-sendmail/index.php

Код: Выделить всё

/**
 * Экранирование опасных символов html
 *
 * @param string $html
 * @return string
 */
function hEscape($html)
{
    return strtr
    (
        $html, 
        array
        (
            '&'  => '&' , 
            '"'  => '"', 
            '\'' => ''', 
            '<'  => '<'  , 
            '>'  => '>'
        )
    );
}
простой пример эффективной замены

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 22:57:13
Alex Keda
ага. понял.
вопрос отслеживания общего числа необходимых замен так и остаётся открытым.. =(((
то что не заменилось - останется в коде...
ну да ладно - идеала нет.

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 23:10:34
zg
lissyara писал(а):вопрос отслеживания общего числа необходимых замен так и остаётся открытым.. =(((
какие проблемы? есть же ещё более эффективная функция - preg_replace_callback() как хочешь, так и заменяй

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 23:30:21
Alex Keda
zg писал(а):
lissyara писал(а):вопрос отслеживания общего числа необходимых замен так и остаётся открытым.. =(((
какие проблемы? есть же ещё более эффективная функция - preg_replace_callback() как хочешь, так и заменяй
снова непонял

Re: [PHP] массивы. нужна идея

Добавлено: 2008-11-29 23:49:18
zg
lissyara писал(а):снова непонял

Код: Выделить всё

<?

$replace = array(
	'var1' => 'Some var uno' ,
	'var2' => 'Some var duet',
);

$wrongVars = array();


function myReplace($arr)
{
	global $replace, $wrongVars;
	$varName = $arr[1];
	
	if ( isset($replace[ $varName ]) ) return $replace[ $varName ];
	
	$wrongVars[] = $varName;
	
	return $arr[0];
}


$text = '<b><!--var1--></b><b><!--var2--></b><b><!--var3--></b>';

echo preg_replace_callback('~<!--\s*(\w+)\s*-->~', 'myReplace', $text), PHP_EOL;

print_r($wrongVars);

?>
======= Результат =======
<b>Some var uno</b><b>Some var duet</b><b><!--var3--></b>
Array
(
    [0] => var3
)
примерно так