2017-12-25 7 views
0

知識の不足私は多次元PHPになるだろう、私のプロジェクトを続行するのを混乱させる、誰もPHPの多次元で私を助けることができますか?ですから、私は多次元PHPをいくつか持っており、ある条件でランダムな配列から2つの値を得たいと思っています。詳細については、PHP多次元から2つのユニークなランダムな値を取得

$array = Array(
"LABEL1" => Array(
       'value 1', 
       'value 2', 
       'value 3' 
      ), 

"LABEL2" => Array(
       'value 1' 
      ), 

"LABEL3" => Array(
       'value 1', 
       'value 2' 
      ), 

"LABEL n" => Array(
       'value n' 
      ) 
) 

$output = random($array); 
print_r($output); 

//output a $output 

Array(
    [LABEL unique n] => Array(
       [0] => 'value 1' 
      ) 
    [LABEL unique n] => Array(
       [1] => 'value 2' 
       [n] => 'value n' 
      ) 
) 

//or 

Array(
    [LABEL1] => Array(
       [0] => 'value 1' // always index [0] from LABEL n 
      ) 
    [LABEL3] => Array(
       [1] => 'value 2' //get index > [0] from LABEL n 
      ) 
) 

    //or 

    Array(
    [LABEL2] => Array(
       [0] => 'value 1' // always index [0] from LABEL n 
      ) 
    [LABEL1] => Array(
       [1] => 'value 2' //get index > [0] from LABEL n 
       [2] => 'value 3' //get index > [0] from LABEL n 
      ) 
) 

    //or 

    Array(
    [LABEL2] => Array(
       [0] => 'value 1' // always index [0] from LABEL n 
      ) 
    [LABEL3] => Array(
       [1] => 'value 2' //get index > [0] from LABEL n 
      ) 
) 

は不可能ですか?

答えて

0

あなたのサンプル入力与えられ、このコードに不具合がある:「第二のランダムターゲットにサブアレーは」一つだけの要素を持っており、その要素のキーが第二、その後、「最初にランダムに対象部分配列」と同じである

サブ配列は結果配列で空になります。デモリンクを実行してこの問題を明らかにする。

コード:(Demo

$array=[ 
    "LABEL1"=>['value 1','value 2','value 3'], 
    "LABEL2"=>['value 1'], 
    "LABEL3"=>['value 1','value 2'], 
    "LABEL9"=>['value n'] 
]; 

$rand_keys=array_rand($array,2); // generate an array of two random keys from $array 
foreach($rand_keys as $i=>$key){ 
    if($i==0){ 
     $subarray=$array[$key]; 
     $column=array_rand($subarray); // column to be excluded from 2nd iteration's subarray 
     $result[$key][$column]=$subarray[$column]; // store the randomly selected value 
    }else{ 
     $diff=array_diff_key($array[$key],[$column=>'']); // store all elements that are not from the same column as first subarray 
     $result[$key]=$diff; // when subarrays are LABEL2 & LABEL9 or LABEL9 & LABEL2, then the second subarray will be empty 
    } 
} 
var_export($result); 

可能な出力:

array (
    'LABEL1' => 
    array (
    1 => 'value 2', 
), 
    'LABEL3' => 
    array (
    0 => 'value 1', 
), 
) 

可能な出力:

array (
    'LABEL1' => 
    array (
    0 => 'value 1', 
), 
    'LABEL2' => 
    array (
), 
) 
+0

@Luckymanはどのようにして第二の可能な出力のようなケースを処理したいですか?あなたの質問にもっと明快さを加えてください。 – mickmackusa

+0

@ Luckymanまた、ランダムなサブアレイからランダムな要素を保存し、最初に保存された要素と同じキーのみを持つすべてのサブアレイをフィルタリング(削除)しますか?これにより、要素の2番目に格納されたサブアレイが空になることはありません。最初に格納されたサブアレイには常にランダムに選択されたサブアレイの最初の要素が含まれているため、サンプル出力はあいまいです。あなたの質問を読むほど、私はもっと混乱します。 – mickmackusa

関連する問題