1

我有一个巨大的多维数组,我们来命名它$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

4 回答 4

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);
于 2012-12-01T12:48:25.820 回答
1

有几种方法可以模拟foreach循环$array['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(). 它们有助于像循环一样转换事物,但实际上并没有使用循环。因此,它们在某些方面在语法上更加灵活。

于 2012-11-29T05:45:59.013 回答
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' => 'one'

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

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

最后:

array_push($big_array, $value);
于 2012-12-04T14:43:46.157 回答
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);
}

我不完全确定我的问题是否正确。如果您要问其他问题,请澄清,我将编辑我的答案。

于 2012-11-26T05:20:09.637 回答