合并并从两个不同大小的数组创建数组

时间:2014-03-20 21:24:46

标签: php arrays

我需要采用两个数组,并将它们组合成这样。不确定如何。这是两个数组。

$items = array( 'activity', 'photos');
$activity_subitems = array ('var1', 'var2', 'var3');
$photo_subitems = array ('var1', 'var2');

我希望它在这样的数组中;

$query_vars = array( 
    'activity' => 'var1',
    'activity' => 'var2',
    'activity' => 'var3',
    'photos' => 'var1',
    'photos' => 'var2'
);

3 个答案:

答案 0 :(得分:2)

如果生成的数组是字典,则不能,因为您要为多个值创建多个相同的键。如果它不是字典,请重新解释这个问题。

如果你想要的是创造这样的东西:

Array ( 
    [activity] => Array (
        [0] => var1
        [1] => var2
        [2] => var3
      )
    [photos] => Array (
        [0] => var1
        [1] => var2
      )
)

然后你可以这样做(假设这是我们正在讨论的PHP):

$items = array( 'activity', 'photos');
$activity_subitems = array ('var1', 'var2', 'var3');
$photos_subitems = array ('var1', 'var2');

$query_vars = array();

foreach ($items as $item) {
    $query_vars[$item] = ${$item.'_subitems'};
}

print_r($query_vars);

另外,请记住,子数组的值名称是通过将_subitems附加到第一个数组的值来生成的。 我已将变量$photo_subitems重命名为$photos_subitems以使其生效,因为这是$items数组中的值。

答案 1 :(得分:1)

我不认识这种语言,而是以伪代码的方式识别

query_vars = new array();
for ($i in $items) {
   for ($j in $i+'_subitems') {
      query_vars.add($i, $j);
   }
 }

请记住,您要从$ items(位于@ $ j)和静态字段_items

中存储的值创建变量$ j

答案 2 :(得分:1)

我假设您正在使用PHP。首先,您将无法在阵列中使用相同的键具有多个值,但如果您愿意,可以将值自身键入数组。

$items = array( 'activity', 'photos');
$activity_subitems = array ('var1', 'var2', 'var3');
$photo_subitems = array ('var1', 'var2');

$query_vars = array();
$query_vars['activity'] = $activity_subitems
$query_vars['photo'] = $photo_subitems

如果您想要一个数组,其中字符串本身以照片/活动开头,但它不是字典(再次,不能有重复的键),您可以执行以下操作:< / p>

注意: eval()函数通常被认为是不安全的,不推荐用于我所知道的几乎所有语言,PHP也是如此。使用以下操作需要您自担风险,但只要您能够有效控制eval()调用中的文本(即,没有使用任何用户输入),它应该更安全一些。我得到的印象是您可能希望使用$items中的值来说明构建结果时要使用的变量。

$items = array( 'activity', 'photos');
$activity_subitems = array ('var1', 'var2', 'var3');
$photos_subitems = array ('var1', 'var2');
$query_vars = array();

foreach ($items as &$item) {
    foreach (eval('$'.$item.'_subitems') as &$subitem) {
        $query_vars[] = $item.' =>'.$subitem;
    }
}