2015-05-12 160 views
0

我真的坚持尝试创建php查询来从多维数组生成报告。PHP从多维数组生成列表

  1. 生成基于所选择的组数
  2. 打印3的随机名称第一选定组和打印2随机名称其它选择的组

数据实施例的随机名称:

$group1 = [ 
      'Type 1' = ['Name 1', 'Name 2', 'Name 3', 'Name 4'] 
      'Type 2' = ['Name 5', 'Name 6', 'Name 7', 'Name 8'] 
      'Type 3' = ['Name 9', 'Name 10', 'Name 11', 'Name 12'] 
      ] 

$group2 = [ 
      'Type 1' = ['Name 13', 'Name 14', 'Name 15', 'Name 16'] 
      'Type 2' = ['Name 17', 'Name 18', 'Name 19', 'Name 20'] 
      'Type 3' = ['Name 21', 'Name 22', 'Name 23', 'Name 24'] 
      ] 

$group3 = [ 
      'Type 1' = ['Name 25', 'Name 26', 'Name 27', 'Name 28'] 
      'Type 2' = ['Name 29', 'Name 30', 'Name 31', 'Name 32'] 
      'Type 3' = ['Name 33', 'Name 34', 'Name 35', 'Name 36'] 
      ] 
… 

PHP输出例如:

Group Selected: 1 AND 3 

Type 1: Name 1, Name 3, Name 2, Name 26, Name 28 
Type 2: Name 6, Name 5, Name 7, Name 30, Name 31 
Type 3: Name 9, Name 10, Name 11, Name 35, Name 36 

我真的很感激你的回应。

+0

欢迎堆栈溢出!这个问题在信息上有点短暂。你可以分享你的尝试,以及你遇到了什么问题? –

+0

我曾使用array_rand()生成随机的2或3个名称,并使用IF ELSE函数来打印所选组... $ rand_group_1_3names = array_rand($ group1,3); – Abasit

回答

0

如果我理解正确的

$group1 = array(
      'Type 1' => array('Name 1', 'Name 2', 'Name 3', 'Name 4'), 
      'Type 2' => array('Name 5', 'Name 6', 'Name 7', 'Name 8'), 
      'Type 3' => array('Name 9', 'Name 10', 'Name 11', 'Name 12') 
      ); 

$group2 = array(
      'Type 1' => array('Name 13', 'Name 14', 'Name 15', 'Name 16'), 
      'Type 2' => array('Name 17', 'Name 18', 'Name 19', 'Name 20'), 
      'Type 3' => array('Name 21', 'Name 22', 'Name 23', 'Name 24') 
      ); 

$group3 = array(
      'Type 1' => array('Name 25', 'Name 26', 'Name 27', 'Name 28'), 
      'Type 2' => array('Name 29', 'Name 30', 'Name 31', 'Name 32'), 
      'Type 3' => array('Name 33', 'Name 34', 'Name 35', 'Name 36') 
      ); 
// Array of selected groups   
$selected_groups = array(1,3); 
// Making names of selected group arrays 
print_r(make_array(${'group'.$selected_groups[0]}, ${'group'.$selected_groups[1]})); 

function make_array($ar1, $ar2) { 
// 'Type 1', 'Type 2', 'Type 3' 
    foreach (array_keys($ar1) as $key) 
// Collect in $res what we want - 3 names from 1st array and 2 from 2nd 
     $res[$key] = array_merge(array_rand(array_flip($ar1[$key]), 3), array_rand(array_flip($ar2[$key]), 2)); 
    return $res; 
} 

DEMO

+0

感谢** splash58 **它帮助我创建生成报告的功能 – Abasit

0
$group1 = array(
      'Type 1' => array('Name 1', 'Name 2', 'Name 3', 'Name 4'), 
      'Type 2' => array('Name 5', 'Name 6', 'Name 7', 'Name 8'), 
      'Type 3' => array('Name 9', 'Name 10', 'Name 11', 'Name 12') 
      ); 

$group2 = array(
      'Type 1' => array('Name 13', 'Name 14', 'Name 15', 'Name 16'), 
      'Type 2' => array('Name 17', 'Name 18', 'Name 19', 'Name 20'), 
      'Type 3' => array('Name 21', 'Name 22', 'Name 23', 'Name 24') 
      ); 

$group3 = array(
      'Type 1' => array('Name 25', 'Name 26', 'Name 27', 'Name 28'), 
      'Type 2' => array('Name 29', 'Name 30', 'Name 31', 'Name 32'), 
      'Type 3' => array('Name 33', 'Name 34', 'Name 35', 'Name 36') 
      ); 

$selected = array(1,3); 

foreach (array(1,2,3) as $idx) { 
    $sel1 = ${'group' . reset($selected)}['Type ' . $idx]; 
    $sel2 = ${'group' . end($selected)}['Type ' . $idx]; 
    $found1 = array_intersect_key($sel1, array_flip(array_rand($sel1, 3))); 
    $found2 = array_intersect_key($sel2, array_flip(array_rand($sel2, 2))); 
    echo "Type $idx: " . implode (", ", $found1) . ', ' . implode (",", $found2); 
    echo "<br>"; 
} 
+0

谢谢,你是男人....我需要完全像这样:) – Abasit