2015-05-12 325 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