2016-04-10 65 views
0

我有一個數組,看起來像這樣:PHP分裂陣列的關鍵

array (
    'id' => 1, 
    'channel_id' => 1, 
    'field_group' => 1, 
    'url_title' => 'the_very_first_entry', 
    'title' => 'The Very First Entry', 
    'fields' => 
    array (
    0 => 
    array (
     'label' => 'Enter Item Name:', 
     'type' => 'text', 
     'channel_data_id' => 1, 
     'value' => 'Item one', 
     'field_id' => 1 
    ), 
    1 => 
    array (
     'label' => 'Enter Item Description', 
     'type' => 'textarea', 
     'channel_data_id' => 2, 
     'value' => 'Some long text blah blah', 
     'field_id' => 2 
    ) 
    ) 
) 

我想這個分裂成2個數組,一個包含字段,另含一切,即。

陣列1:

array (
    'id' => 1, 
    'channel_id' => 1, 
    'field_group' => 1, 
    'url_title' => 'the_very_first_entry', 
    'title' => 'The Very First Entry' 
); 

陣列2:

array (
    0 => 
    array (
     'label' => 'Enter Item Name:', 
     'type' => 'text', 
     'channel_data_id' => 1, 
     'value' => 'Item one', 
     'field_id' => 1 
    ), 
    1 => 
    array (
     'label' => 'Enter Item Description', 
     'type' => 'textarea', 
     'channel_data_id' => 2, 
     'value' => 'Some long text blah blah', 
     'field_id' => 2 
    ) 
    ) 

是否有更好的解決方案,通過原陣列foreach循環迭代?

回答

5

有沒有更好的解決方案,通過獨創的陣列與foreach循環迭代

你知道分裂密鑰所以有對foreach無實際用途:

$src = array(...); // your source array 
$fields_array = $src['fields']; 
unset($src['fields']); 
+0

謝謝。這正是我目前所掌握的。我認爲可能會有一個「更好的」解決方案,以原生php函數的形式輸出原始數組的2個所需部分,而無需取消設置。 – Inigo

+0

還有一些其他的方法可以使用,但似乎試圖做到的所有其他答案基本上都被破壞了,或者是假設字段是數組的最後一個元素,需要更多步驟才能實現目標或不能正確處理某些情況。保持簡單的事情簡單:) –

0

作爲替代解決方案,如果fields鍵始終是數組的最後一個元素,則可以使用array_pop

$fields = array_pop($array); 

就是這樣。 Demo

+0

現在重新排列源數組,並再次嘗試:) –

1

如果我理解你的問題是正確的。

<?php 

$base = array(...); // your array 

// array values 
$baseArrays = array_filter($base, function($item){ 
    return is_array($item); 
}); 

// not array values 
$not = array_diff($base, $baseArrays); 
+0

這一個也被打破:)將非數組添加到$ base數組(即對象),你得到$ baseArray被它污染,這不是OP想要的。 –

+2

@MarcinOrlowski如果您將'fields'的名稱更改爲'options',您的答案也會被破壞。我只是展示瞭如何從數組中濾除某些東西並將其分成兩部分。 OP可以調用什麼。 –