多维数组和array_push?

时间:2012-11-26 05:11:06

标签: php arrays array-push

我有一个庞大的多维数组,我们将它命名为$big_array

此外,我有这组数据,我必须在上面的数组中添加:

$input = array('one','two','three','four');

这就是我需要推进$ big_array(基于上面的$ input):

 $value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'options' => array('one','two','three','four'),
   'page' => 'font_manager',
   );

  array_push($big_array, $value);

$ big_array结构如下所示:

$big_array = array(
(...)

array(
 'id' => 'Bar',
 'title' => 'Foo',
 'type' => 'select',
 'page' => 'font_manager',
 ), 

 array(
  'id' => 'ss_font',
  'title' => __("Main font:",'solidstyle_admin'), 
  'type' => 'select',
  'page' => 'font_manager',
  'description' =>  __("This font will be used for all pages.",'solidstyle_admin'),
  'default' => '',
  'options' => array(
     'option1' => 'option1',
     'option2' => 'option12,
   ),
  ),

(...)
);

如果可以在数组中包含循环,那么我真正想做的就是这样(是的,我知道这有多错,只是想更好地解释它):

$input = array('one','two','three','four');
$value = array(
       'id' => $number,
       'title' => 'foo',
       'type' => 'options',
       'options' => array(
         foreach($input as $number) {
           echo $number.',';
         };
        ),
       'page' => 'font_manager',
       );

4 个答案:

答案 0 :(得分:4)

认为你想要的是

$input = array('one','two','three','four');

插入

$value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'page' => 'font_manager',
);

所以它看起来像这样:

$value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'options' => array('one','two','three','four'),
   'page' => 'font_manager',
);

然后可以推送到$ bigArray。如果是这种情况,它应该像

一样简单
$input = array('one','two','three','four');
$value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'page' => 'font_manager',
);
$value['options'] = $input;
$bigArray[] = $value; // equivalent to array_push($bigArray, $value);

如果我误解了你的目标,请告诉我。

编辑:如果你想要这样的东西

$value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'options' => array('one,two,three,four'),
   'page' => 'font_manager',
);

那你就改变了

$value['options'] = $input;

$value['options'] = implode(",",$input);

答案 1 :(得分:1)

看看下面的代码。我已对此进行评论,以便您了解我正在做的事情。

$input = array('one','two','three','four');

// set the base info here, i.e., info that is common to each push
$baseInfo = array(   
   'title' => 'foo',
   'type' => 'options',   
   'page' => 'font_manager',
   );

// now loop
foreach($input as $number) {
    // fill in base info with data that is specific to this iteration
    $baseInfo['id'] = $number;
    $baseInfo['options'] = $input;

    // do the push
    array_push($big_array, $baseInfo);
}

我不完全确定我的问题是否正确。如果你问别的话,请澄清,我会编辑我的答案。

答案 2 :(得分:1)

有几种方法可以在foreach模拟$array['options']循环 - 最简单的方法是在其他地方定义一个函数,然后返回那个options数组!像:

function return_array_options($input) {
   $array = array();
   foreach($input as $number) {
     $array[] = $number 
     // or, $array['option'.$number] = $number 
   };

   return $array;
}

然后在代码的其他地方你可以使用这个函数:

$my_array = array();
$my_array['options'] = return_array_options(array(1,2,3,4));

通过编程,最好将问题分解为可以合并的小问题的解决方案。

另外,查看PHP的函数式编程函数,如array_map()array_filter()。它们有助于将事物变换为循环woud,但实际上没有使用循环。因此,它们在某种程度上在语法上更灵活。

答案 3 :(得分:1)

如果我理解得很好。你希望得到这个:

    $input = array('one','two','three','four');
    $value = array(
       'id' => $number,
       'title' => 'foo',
       'type' => 'options',
       'options' => array(
         foreach($input as $number) {
           echo $number.',';
         };
        ),
       'page' => 'font_manager',
       );

将它推入$ big_array,我是对的吗?

然后解决方案非常简单。

        $input = array('one','two','three','four');
        $value = array(
           'id' => $number,
           'title' => 'foo',
           'type' => 'options',
           'options' => array(
            ),
           'page' => 'font_manager',
           );

构建你的数组。然后你的循环:

foreach($input as $number)
{
    $value['options'][] = $number;
}

如果你想“按原样”添加$ input,你可以

$value['options'] = $input;

如果你想要'one'=> '一'

foreach($input as $number)
{
    $value['options'][$number] = $number;
}

它将产生与循环完全相同的结果,没有循环开销。

最后:

array_push($big_array, $value);