在Drupal 7网站上,我试图构建一个数组(使用PHP 5.5),从另一个非常大的数组中提取选择字段(" raw_wrap")。我从中提取数据的字段命名为" field_hours_1," " field_hours_2," " field_hours_3,"所以我想我可以用每次传递增加这些名字(而不是将它们全部分开)。不幸的是,当打印出数组时,我在所有字段中获得相同的值。
这里的代码是:
$nid = arg(1);
$node = node_load($nid);
$wrapper = entity_metadata_wrapper('node', $node);
$raw_wrap = $wrapper->raw();
$days_array = array();
for( $x=1; $x<5; $x++ ) {
$ho = "raw_wrap->field_hours_" . $x . "['und'][0]['value']";
$days_array[$x]['hours_open'] = date('H:i', strtotime($ho));
$hc = "raw_wrap->field_hours_" . $x . "['und'][0]['value2']";
$days_array[$x]['hours_close'] = date('H:i', strtotime($hc));
}
打印出新阵列然后给我:
Array
(
[1] => Array
(
[hours_open] => 18:00
[hours_close] => 18:00
)
[2] => Array
(
[hours_open] => 18:00
[hours_close] => 18:00
)
[3] => Array
(
[hours_open] => 18:00
[hours_close] => 18:00
)
[4] => Array
(
[hours_open] => 18:00
[hours_close] => 18:00
)
)
另请注意,数字(&#34; 18:00&#34;在这种情况下)不会改变。我是如何得到更新的第二个数字 - 并且两个数字(开启和关闭时间)对于四个桶中的每一个都是不同的?
这里是大型数组中字段布局的方式(&#34; $ raw_wrap&#34;):
[field_hours_1] => Array
(
[und] => Array
(
[0] => Array
(
[value] => 0000-01-01 12:50:36
[value2] => 0000-01-01 23:50:36
[timezone] => America/Chicago
[timezone_db] => UTC
[date_type] => datetime
)
)
[field_hours_2] => Array
(
[und] => Array
(
[0] => Array
(
[value] => 0000-01-01 12:05:36
[value2] => 0000-01-01 22:05:36
[timezone] => America/Chicago
[timezone_db] => UTC
[date_type] => datetime
)
[field_hours_3] => Array
(
[und] => Array
(
[0] => Array
(
[value] => 0000-01-01 13:35:36
[value2] => 0000-01-01 22:35:36
[timezone] => America/Chicago
[timezone_db] => UTC
[date_type] => datetime
)
)
)
依旧......
编辑:这似乎归结为:我可以使用以下内容添加到我的新数组中,但我想通过循环执行此操作。
$days_array[]['hour_open'] = $raw_wrap->field_hours_1['und'][0]['value'];
$days_array[]['hour_open'] = $raw_wrap->field_hours_2['und'][0]['value'];
$days_array[]['hour_open'] = $raw_wrap->field_hours_3['und'][0]['value'];
我无法找到一种方法来增加&#34; field_hours _&#34;领域。我没有运气取代1,2&amp;例如,使用&#34; $ x。&#34;
我之前尝试过构建字符串,例如:
$hc = "raw_wrap->field_hours_" . $x . "['und'][0]['value2']";
$days_array[]['hours_close'] = date('H:i', strtotime($hc));
但这并不奏效。 (它给出了语法错误。)
我尝试构建复合变量:
${"raw_wrap->field_hours_" . $x . "['und'][0]['value2']"}
我尝试过简单地将变量放入字符串中,如下所示:
$raw_wrap->field_hours_$x['und'][0]['value2']
这又出现了另一个错误。我开始相信您无法通过循环中的变量更改其名称来添加这些字段。也许它根本无法完成?
答案 0 :(得分:0)
这是语法。在你的循环中使用它:
`{"vendors":{"js":"assets/vendors.js"},"app":{"js":"assets/f7133dfe501a7dbe8ebd.js"}}`
这是关于phpFiddle的完整测试代码:http://phpfiddle.org/main/code/gwme-zg8p