Я использую eval для создания ассоциативного массива из php, встроенного в xml-парсер (не фанат того, как настраивается массив). Конкретный XML, который я использую, является ответом First Data, и теги и атрибуты имеют двоеточия, которые, по-видимому, действительно не нравится функции eval.
Я пытался убежать от двоеточия, но Эвал без ума от косой черты (и спасшейся косой черты). Какой хороший способ подготовить строки для функции eval?
function get_XML_Array($XML) {
$error = true ;
$parser = xml_parser_create() ;
xml_parse_into_struct($parser, $XML, $set) ;
xml_parser_free($parser);
include_once(DIR_ROOT . "Tools/escape_Colon.php") ;
if($error){echo_Array($set);}
foreach($set as $key => $value) {
foreach($set[$key] as $key_2 => $value_2){
$set[$key][$key_2] = escape_Colon($value_2) ;
foreach($set[$key]['attributes'] as $key_3 => $value_3){
$set[$key]['attributes'] = escape_Colon($value_3) ;
}
}
}
$Array = array();
$arr_str = '$Array' ;
$arr_str_i = '$Array' ;
$inc = 0 ;
$level = 1 ;
foreach($set as $key => $value) {
if($set[$key]['level'] >= $level){
$arr_str_i .= '[\''.$set[$key]['tag'].'\']' ;
if(!preg_match('/^(\s)*$/', $set[$key]['value'])){
$str = '$inc = '.$arr_str_i.'[\'increment\'] ;' ;
eval($str) ;
$str = $arr_str_i.'[\'value\'][\''.($inc?$inc:0).'\'] = \''.$set[$key]['value'].'\';' ;
eval($str) ;
$str = $arr_str_i.'[\'increment\']++ ;' ;
eval($str) ;
}
foreach($set[$key]['attributes'] as $att_key => $att_value){
$str = $arr_str_i.'[\'attributes\'][\''.$att_key.'\'] = \''.$att_value.'\';' ;
eval($str) ;
}
if($set[$key+1]['level'] >= $level){
$arr_str = $arr_str_i ;
}
}elseif($set[$key]['level'] == 1){
$arr_str = '$Array' ;
$arr_str_i = '$Array' ;
$level = 1 ;
$arr_str_i .= '['.$set[$key]['tag'].']' ;
}else{
$level = $set[$key]['level'] ;
$arr_str_i = $arr_str ;
}
$level++ ;
}
return $Array ;
}
?>