我正在使用迁移,我正在迁移文档已被标记的分类术语。文档中的术语用逗号分隔。到目前为止,我已设法将每个术语分开并将其放入如下数组:
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_one
和field_two
,我希望将数组的值0放入field_one
,将值1放入field_two
e.g
field_one=[0]$terms;
我知道这不正确,我不知道如何做这部分。有关如何做到这一点的任何建议吗?
答案 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
结果中至少有两项,就应该有效。