如何使用递归函数解析 Nested ObjectArray 或 ObjectArray Tree,以及如何获取每个节点/游标?
我正在解析它并创建一个有组织的结构,通过事后......使用它。
我的 ObjectArray 树是这样的:
object(stdClass)[248]
'id' => int 0
'type' => string 'root' (length=4)
'related_dropzone_id' => int 0
'related_dropzone_order' => int 0
'options' =>
object(stdClass)[250]
'children' =>
object(stdClass)[249]
'1376112098462' =>
(stdClass)[247]
'id' => string '1376112098462' (length=13)
'type' => string 'section' (length=7)
'related_dropzone_id' => int 0
'related_dropzone_order' => int 0
'dropzones' =>
object(stdClass)[246]
...
'options' =>
object(stdClass)[245]
...
'children' =>
object(stdClass)[244]
...
'1376112118210' =>
object(stdClass)[252]
'id' => string '1376112118210' (length=13)
'type' => string 'section' (length=7)
'related_dropzone_id' => int 0
'related_dropzone_order' => int 1
'dropzones' =>
object(stdClass)[255]
...
'options' =>
object(stdClass)[253]
...
'children' =>
object(stdClass)[254]
...
它有 children intro children 包含对我有效的信息,我需要解析它。
这是我的函数代码:
static public function get_content_html_render_LOM( $data_LOM , $handlebars_instance = '' , $template = '' ) {
static $template_result = ''; // Save the result html always - recursion
if ( $handlebars_instance == '' || ! ( $handlebars_instance instanceof Handlebars_Engine ) ) {
Handlebars_Autoloader::register();
$handlebars_instance = new Handlebars_Engine;
}
if ( isset ( $data_LOM->children ) )
foreach ( $data_LOM->children as $cursor ) {
$template_children = self::read_data_file( SpireBuilder::$widgets_dir . $cursor->type . '/templates/front-end.php' , array() );
if ( isset($cursor->related_dropzone_id) && $cursor->related_dropzone_id == 0 ){
$template = $template_children ; // esto tengo que cambiarlo pues cuando llega a un nuevo nodo
}
// Render template with data
if ( ! isset( $cursor->children ) )
$template_result = $handlebars_instance->render( $template , $cursor );
else {
//dropzones = srray vacio
// Por cada dropzone del lom hacer un foreach
// temporal children = children de childre
// ordenado children = ordenar temportal childre
// por cada children de este children
// si dropne.'i' == children[related dropxzone id]
// dropzone.'í' = templaate childre
// si no noop
$template_result = $handlebars_instance->render( $template , array( 'options' => $cursor->options , 'dropzones' => array( 'A' => $template_children ) ) );
//var_dump($template_result);
}
self::get_content_html_render_LOM( $cursor , $handlebars_instance , $template_result );
}
return $template_result;
}
最佳答案
测试: $result[] = self::get_content_html_render_LOM( $cursor , $handlebars_instance , $template_result );
保存所有返回递归函数。
关于php - 递归解析php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168671/
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我想用Nokogiri解析HTML页面。页面的一部分有一个表,它没有使用任何特定的ID。是否可以提取如下内容:Today,3,455,34Today,1,1300,3664Today,10,100000,3444,Yesterday,3454,5656,3Yesterday,3545,1000,10Yesterday,3411,36223,15来自这个HTML:TodayYesterdayQntySizeLengthLengthSizeQnty345534345456563113003664354510001010100000344434113622315
我使用的第一个解析器生成器是Parse::RecDescent,它的指南/教程很棒,但它最有用的功能是它的调试工具,特别是tracing功能(通过将$RD_TRACE设置为1来激活)。我正在寻找可以帮助您调试其规则的解析器生成器。问题是,它必须用python或ruby编写,并且具有详细模式/跟踪模式或非常有用的调试技术。有人知道这样的解析器生成器吗?编辑:当我说调试时,我并不是指调试python或ruby。我指的是调试解析器生成器,查看它在每一步都在做什么,查看它正在读取的每个字符,它试图匹配的规则。希望你明白这一点。赏金编辑:要赢得赏金,请展示一个解析器生成器框架,并说明它的
我有一个随机大小的散列,它可能有类似"100"的值,我想将其转换为整数。我知道我可以使用value.to_iifvalue.to_i.to_s==value来做到这一点,但我不确定我将如何在我的散列中递归地做到这一点,考虑到一个值可以是一个字符串,或一个数组(哈希或字符串),或另一个哈希。 最佳答案 这是一个非常简单的递归实现(尽管必须同时处理数组和散列会增加一些技巧)。deffixnumifyobjifobj.respond_to?:to_i#IfwecancastittoaFixnum,doit.obj.to_ielsifobj
我经常迷上ruby的一件事是递归模式。例如,假设我有一个数组,它可能包含无限深度的数组作为元素。所以,例如:my_array=[1,[2,3,[4,5,[6,7]]]]我想创建一个方法,可以将数组展平为[1,2,3,4,5,6,7]。我知道.flatten可以完成这项工作,但这个问题是作为我经常遇到的递归问题的一个例子-因此我试图找到一个更可重用的解决方案。简而言之-我猜这种事情有一个标准模式,但我想不出任何特别优雅的东西。任何想法表示赞赏 最佳答案 递归是一种方法,它不依赖于语言。您在编写算法时要考虑两种情况:再次调用函数的情
我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(