2017-05-24 25 views
1

鑑於以下集合/數組:Laravel/PHP重命名關聯的密鑰不知道他們的名字

[ 
    "somename" => "test.test.be" 
    "anothername" => "test" 
    "yetanothername" => "testing" 
    "extrafield" => "extra", 
    "extrafield" => "extra", 

] 

當我取回此集合,我總是知道他們的命令,但我不知道密鑰的名稱。所以我想要做的是轉換這個集合,並將鍵名更改爲我定義的值。

對於非關聯數組我會做類似

$trimmedCollection->transform(function ($item) { 
     return [ 
      'email'    => $item[0], 
      'first_name'   => $item[1], 
      'surname'    => $item[2], 
     ]; 
    }); 

但我會如何處理這對於給定的收集?另外如何處理溢出項目。假設我突然得到了10個鍵值對,但只寫了3個變換,我將如何將所有溢出轉換爲默認鍵?

編輯: 對於溢出項目,我想分配給定數組中的所有額外字段以便像這樣存儲。

下面將是最後一個數組:

[ 
    "email" => "test.test.be" 
    "first_name" => "test" 
    "surname" => "testing" 
    "additional_fields" => ["key-name" => "extra","key-name" => "extra"] 

] 

將鍵名字是我拿到了鑰匙的原始名稱。

+1

請詳細說明'溢出項目'部分的示例輸入和期望的輸出 – Steve

回答

1

您可以使用array_shift刪除第一個元素數組中的每一個已知元素,剩餘陣列添加到您的additional_fields鍵:

$trimmedCollection->transform(function ($item) { 

    return [ 
     'email'    => array_shift($item), //$item[0] 
     'first_name'   => array_shift($item), //$item[1] 
     'surname'    => array_shift($item), //$item[2] 
     'additional_fields' => $item //all remaining items 
    ]; 
}); 
+0

感謝您的答案!對於溢出項目:集合中的所有剩餘項目應該具有指定爲'additional_fields'的鍵,並且數據將存儲在json表中。我希望這已經足夠清楚了 – Christophvh

+0

@Christophvh你可以爲你的問題添加示例輸入和期望的輸出,所以我清楚你的需求。 – Steve

+0

是的,對不起。我添加了一個例子 – Christophvh

1

你可以做這樣的事情來改變你的選擇鍵。這保留其他值與他們不變的鍵。

function replace_array_key(array &$item, $oldKey, $newKey) 
{ 
    $item[$newKey] = $item[$oldKey]; 
    unset($item[$oldKey]); 
} 

$trimmedCollection->transform(function ($item) { 
    replace_array_key($item, 'somename', 'email'); 
    replace_array_key($item, 'anothername', 'first_name'); 
    replace_array_key($item, 'yetanothername', 'surname'); 

    return $item; 
}); 

你甚至可以將它擴展到舊的和新的鍵名的數組列表並運行它和arrap_map。

+0

感謝您的回答!這是一個有趣的方法,也可以工作!但我去了array_shift解決方案。 – Christophvh

+0

@Christophvh np,我沒有看到將其他值移動到子數組的編輯。我也會和史蒂夫的解決方案一起去。還要記住根據項目順序進行輪班工作,如果您的項目順序發生變化,您可能需要對其進行調整以根據鍵進行輪班。 – Sandeesh