如何通过递增字段标题中的数字

时间:2016-03-14 18:35:54

标签: php arrays while-loop drupal-7 field

在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']

这又出现了另一个错误。我开始相信您无法通过循环中的变量更改其名称来添加这些字段。也许它根本无法完成?

1 个答案:

答案 0 :(得分:0)

这是语法。在你的循环中使用它:

`{"vendors":{"js":"assets/vendors.js"},"app":{"js":"assets/f7133dfe501a7dbe8ebd.js"}}`

这是关于phpFiddle的完整测试代码:http://phpfiddle.org/main/code/gwme-zg8p