将数组值分配给字段

时间:2013-10-28 12:51:04

标签: php drupal drupal-7 migration

我正在使用迁移,我正在迁移文档已被标记的分类术语。文档中的术语用逗号分隔。到目前为止,我已设法将每个术语分开并将其放入如下数组:

public function prepareRow($row) {
    $terms = explode(",", $row->np_tax_terms);
        foreach ($terms as $key => $value) {
          $terms[$key] = trim($value);
        }
        var_dump($terms);
        exit;
}

当我将它转储到终端时,这给了我以下结果:

array(2) {
  [0]=>
  string(7) "Smoking"
  [1]=>
  string(23) "Not Smoking"
}

现在我有两个字段field_onefield_two,我希望将数组的值0放入field_one,将值1放入field_two e.g

field_one=[0]$terms;

我知道这不正确,我不知道如何做这部分。有关如何做到这一点的任何建议吗?

3 个答案:

答案 0 :(得分:2)

如果您只想将分类术语的字符串值存储到节点的不同字段中,那么以下代码应该可以解决这个问题:

$node->field_one['und'][0]['value'] = $terms[0];
$node->field_two['und'][0]['value'] = $terms[1];
node_save($node);

请注意,您需要首先加载节点,如果您需要帮助,请在此处发表评论并更新我的答案。

答案 1 :(得分:1)

您具体询问有关ArrayList和HashMap的内容,但我认为要完全理解您需要了解的集合框架。因此,ArrayList实现List接口,HashMap实现Map接口。

List:

有序集合(也称为序列)。该接口的用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。

Map:

将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。

正如其他答案所讨论的那样,列表接口(ArrayList)是您使用索引访问的对象的有序集合,非常类似于数组(在ArrayList的情况下,顾名思义,它只是一个数组在后台,但很多处理数组的细节都是为你处理的)。当你想要按照排序顺序(它们被添加的顺序,或者你添加对象时指定的列表中的位置)保存事物时,你会使用ArrayList。

另一方面,Map获取一个对象并将其用作另一个对象(值)的键(索引)。因此,假设您拥有具有唯一ID的对象,并且您知道您希望在某些时候通过ID访问这些对象,Map将使您更容易(并且更快/更高效)。 HashMap实现使用密钥对象的哈希值来定位它的存储位置,因此不再保证值的顺序。

答案 2 :(得分:0)

您可能想尝试:

list($field_one, $field_two) = prepareRow($row);

list函数将数组中的条目(按顺序)映射到通过引用传递的变量。

这有点脆弱,但只要您知道prepareRow结果中至少有两项,就应该有效。