2016-04-10 63 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可以调用什么。 –