PHP按键拆分数组

时间:2016-04-10 22:42:48

标签: 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循环迭代原始数组是否有更好的解决方案?

3 个答案:

答案 0 :(得分:5)

  

是否有更好的解决方案,使用foreach循环遍历原始数组

您知道分裂键,因此foreach没有实际用途:

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

答案 1 :(得分: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);

答案 2 :(得分:0)

作为替代解决方案,如果 fields键始终是数组的最后一个元素,则可以使用array_pop

$fields = array_pop($array);

就是这样。 Demo