2013-10-28 155 views
0

我正在使用遷移,並且正在遷移文檔已標記的分類術語。術語在文檔中以逗號分隔。到目前爲止,我已成功地每學期分開,並將其放置到一個數組,像這樣:將數組值賦給字段

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 例如

field_one=[0]$terms;

我知道這是不正確的,我不知道如何做到這一點。有關如何做到這一點的任何建議嗎?

回答

2

如果你只希望在分類項的字符串值存儲到一個節點的不同字段,然後將下面的代碼應該做的伎倆:

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

注意,您將需要加載首先,如果您需要幫助,請在此處註釋並更新我的答案。

+0

感謝您的回答 –

0

你可能想嘗試:

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

list函數映射條目的數組(按順序)通過引用傳遞的變量。

這是一個有點脆弱,但應該工作,只要你知道你的prepareRow結果至少有兩個項目。

+0

我會在哪裏把這個(不熟悉列表,但我會去) –

1

你在問關於ArrayList和HashMap的具體問題,但我想完全理解你要了解什麼是你必須瞭解的集合框架。所以一個ArrayList實現了List接口,而一個HashMap實現了Map接口。

List: 

有序集合(也稱爲序列)。該接口的用戶可以精確控制每個元素插入到列表中的哪個位置。用戶可以通過整數索引(列表中的位置)訪問元素,並搜索列表中的元素。

Map: 

將鍵映射到值的對象。地圖不能包含重複的鍵;每個鍵可以映射到最多一個值。

因此,正如其他答案所討論的那樣,列表接口(ArrayList)是使用索引訪問的對象的有序集合,非常類似於數組(就ArrayList而言,顧名思義,它只是一個在後臺的數組,但處理數組的很多細節都是爲你處理的)。如果要按事件順序排列(添加順序,或添加對象時指定的列表中的位置),可以使用ArrayList。

另一方面,映射佔用一個對象,並將其用作另一個對象(值)的鍵(索引)。因此,可以說你有一些具有唯一ID的對象,並且你知道你想要在某個時候通過ID訪問這些對象,那麼Map會讓你很容易(並且更快/更高效)。 HashMap實現使用密鑰對象的散列值來定位它的存儲位置,因此不再需要保證值的順序。