我有一个庞大的多维数组,我们将它命名为$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',
);
答案 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);