PHP生成具有多维数组变体的列表

时间:2015-05-12 17:57:34

标签: php random multidimensional-array

我真的被困在尝试创建php查询以从多维数组生成报告。

  1. 根据所选的组号生成随机名称
  2. 打印3个随机名称首选组并打印2个随机名称其他选定组
  3. 数据示例:

     $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
    

    我非常感谢您的回复。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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>";
}