phpToStr

Класс разработан для преобразования php-переменных и массивов в строку.

Синтаксис: toStr( $data='', $name='', $associations=array() )

$data - массив или переменная

$name - имя переменной которая будет содержать данные $data

$associations - массив ассоциций для ключей, применяется в редких случаях о которых можно почитать ниже

Пример:

имеем массив в пхп-скрипте:

$my_array = array('очень','интересный'=>'полезный','класс');

нужно записать массив в таком же виде в нужный файл, который можно подключать с помощью include()

$str_array = $GLOBALS["phpToStr"]->toStr($my_array, 'my_name');

помним, что записать в файл очень удобно с помощью функции write_

write_( '<?php '. $str_array .' ?>', 'dir/file.php');

теперь, в нужный момент получаем доступ к массиву:

include('dir/file.php');

проверим правильность сохранения:

print_r($my_name);

Таким образом можно сохранять в файл сразу множество массивов:

$cache  = '<?php '.
$GLOBALS["phpToStr"]->toStr($my_array, 'this->my_name').
$GLOBALS["phpToStr"]->toStr($this->base_id, 'this->base_id', $associations).
$GLOBALS["phpToStr"]->toStr($this->index_id, 'this->index_id').' ?>';

write_( $cache, 'dir/file.php');

Примечание о $associations:

Применяется в случаях, когда файл в который будет помещен массив $data нужно сделать как можно минимальным по размеру.

Делается это с помощью замены имен ключей на короткие названия.

К примеру у Вас есть название ключа image_file_path, представим что у нас 5 000 таких имен ключей, чтобы не писать в файл image_file_path, можно заменить имя ключа например на цифру 1. Для этого заведем массив следующего вида:

$associations=array('image_file_path'=1);

или

$associations['image_file_path'] = 1;

Таким образом в файл будет записано 5 000 раз единицы вместо image_file_path и в результате мы получим файл в 5 000 раз меньшего размера, что конечно повлияет на его загрузку с помощью конструкции include()

class phpToStr{function arr2str($a){
		$i = 0;
		if(is_array($a) && !empty($a)){
			foreach($a as $k=>$v){
				if($v || $v===0 || $v=='0'){
					if($i){ $this->data .= ","; }
					if(is_array($v)){
						$this->data .= $this->quote($this->Association($k))."=>array(";
						$this->arr2str($a[$k]);
						$this->data .= ')';
					}else{
						$this->data .= $this->quote($this->Association($k))."=>".$this->quote($v);//."\n"
					}
					$i++;
				}else{
					unset($a[$k]);
				}
			}
		}
	}
	function quote($str){
		if(isset($str)){
			if($str){
				$str = str_replace("~~S~~", "'", str_replace("'", "\'", str_replace("\'", "\\~~S~~", $str)));// экранируем одиночные кавычки
				if(substr($str,-1)=='\\'){// т.к. в конце строки есть слэш
					preg_match_all('/([\\\]{1,}+)/U', $str, $arr);// находим участки со слэшами
					$arr = array_reverse($arr['1']);// разворачиваем массив, делая последний участок со слэшами - 1ым
					$str = mb_substr($str, 0, -mb_strlen($arr['0'])).str_replace('\\','\\\\',$arr['0']);
				}
			}
			return is_numeric($str)? $str : "'".$str."'";
		}
	}
	function Association($key){
		return $this->associations[$key]? $this->associations[$key] : $key;
	}
	function toStr($data='', $name='without_name', $associations=array(), $only_result=false){
		if($data){
			if(is_array($data)){
				$this->associations = $associations;
				$this->data = 'array(';
				$this-> arr2str($data);
				$this->data .= ')';
			}else{
				$this->data = $this->quote($data);
			}
			return $only_result? $this->data : '$'.$name.'='.$this->data.';';
		}
	}
}
$phpToStr = new phpToStr();


Предложения и пожелания:

 

Обсуждения на форуме:

Кто-нибудь может мне помочь???

Помогите пожалуйста с "nofollow"

Будущее ЯPro

Чат

Создание меню

Ошибки в логах

Нужна помощь в реализации

Полезное:

Видео-обучение

Работа с шаблонами

Документация API

База данных и её таблицы

Регистрация на форуме

Скачать последнюю версию

Связь с авторами

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2019 YaPro.Ru

Лебеденко Николай Николаевич
Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter