2017-11-11 12 views
0

私は多次元配列を持っています。これはユーザーの選択リストです。これは、ユーザーから取得したデータの単なる例です。サブアレイの組み合わせは、ユーザの選択によって変わることがあります。 要素3,5,2をそれぞれ有する3つのサブ配列に似ている。そして、配列のキーは、そのからのものにする必要があります...多次元配列を単純な配列に分割する方法

array(7) { 
    ["resume_residence"]=> 
    string(8) "Barbados" 
    ["resume_language_fluently"]=> 
    string(8) "Mandarin" 
    ["resume_language_professional"]=> 
    string(7) "Spanish" 
    ["resume_language_basic"]=> 
    string(8) "Mandarin" 
    ["resume_overseas_experience"]=> 
    string(2) "No" 
    ["resume_degree"]=>  array(2) { 
     [0]=> string(2) "BA" 
     [1]=> string(3) "BFA" 
    } 
    ["resume_career_employment_status"]=> array(2) { 
     [0]=> string(8) "Employed" 
     [0]=> string(10) "Unemployed" 
    } 
} 

を、私はどのように私を助けてください

array(4){ 
    array(7) { 
     ["resume_residence"]=> string(8) "Barbados" 
     ["resume_language_fluently"]=> string(8) "Mandarin" 
     ["resume_language_professional"]=> string(7) "Spanish" 
     ["resume_language_basic"]=> string(8) "Mandarin" 
     ["resume_overseas_experience"]=> string(2) "No" 
     ["resume_degree"]=> string(2) "BA" 
     ["resume_career_employment_status"]=> string(2) "Employed" 
    }, 
    array(7) { 
     ["resume_residence"]=> string(8) "Barbados" 
     ["resume_language_fluently"]=> string(8) "Mandarin" 
     ["resume_language_professional"]=> string(7) "Spanish" 
     ["resume_language_basic"]=> string(8) "Mandarin" 
     ["resume_overseas_experience"]=> string(2) "No" 
     ["resume_degree"]=> string(2) "BA" 
     ["resume_career_employment_status"]=> string(2) "Unemployed" 
    }, 
    array(7) { 
     ["resume_residence"]=> string(8) "Barbados" 
     ["resume_language_fluently"]=> string(8) "Mandarin" 
     ["resume_language_professional"]=> string(7) "Spanish" 
     ["resume_language_basic"]=> string(8) "Mandarin" 
     ["resume_overseas_experience"]=> string(2) "No" 
     ["resume_degree"]=> string(2) "BFA" 
     ["resume_career_employment_status"]=> string(2) "Employed" 
    }, 
    array(7) { 
     ["resume_residence"]=> string(8) "Barbados" 
     ["resume_language_fluently"]=> string(8) "Mandarin" 
     ["resume_language_professional"]=> string(7) "Spanish" 
     ["resume_language_basic"]=> string(8) "Mandarin" 
     ["resume_overseas_experience"]=> string(2) "No" 
     ["resume_degree"]=> string(2) "BFA" 
     ["resume_career_employment_status"]=> string(2) "Unemployed" 
    } 
} 

よう変換するために、それぞれが単一の値のキーを持つ複数のアレイにこの配列をしたいです上記のように配列を複数の配列に分割することができます。

+1

だから、あなたは常にresume_degree'と '' resume_career_employment_status'に最初の値を使用するようにしたいですか?それから、 '$ res ['resume_career_employment_status'] = $ array ['resume_career_employment_status'] [0];と' resume_degree'に対して同じことをしてください。 –

+0

いいえ、私は2番目の配列の "resume_degree"のようなそれぞれから単一の値を持つ複数の配列を作成する "BFA"にする必要があります。 – Sufyan

+0

は学位を再開し、キャリア雇用状況をカウントで再開していますか? 0 => 0、1 => 1,2、> 2がマッチしますか? –

答えて

0

入力の異なるキーに割り当てられた配列値のすべての可能な組み合わせを生成すると思われるようです。

あなたは再帰でこれを行うことができます。

$array = [ 
    "resume_residence"=> "Barbados", 
    "resume_language_fluently"=> "Mandarin", 
    "resume_language_professional"=> "Spanish", 
    "resume_language_basic"=> "Mandarin", 
    "resume_overseas_experience"=> "No", 
    "resume_degree"=> ["BA", "FBA"], 
    "resume_career_employment_status"=> ["Employed", "Unemployed"] 
]; 

function expandArrays(&$array) { // Argument by reference 
    // Get current key and value based on the array pointer 
    $key = key($array); 
    $value = current($array); 
    // Get results for any further key/values through recursion: 
    $results = next($array) ? expandArrays($array) : [$array]; 
    // Nothing changes if the current value is not an array 
    if (!is_array($value)) return $results; 
    // It is an array, so produce all combinations of the partial results with each value 
    foreach($value as $v) { 
     foreach($results as $r) { 
      $r[$key] = $v; 
      $newResults[] = $r; 
     } 
    } 
    // ... and return that as a result 
    return $newResults; 
} 

$results = expandArrays($array); 

print_r($results); 

出力:

Array (
    [0] => Array (
     [resume_residence] => Barbados 
     [resume_language_fluently] => Mandarin 
     [resume_language_professional] => Spanish 
     [resume_language_basic] => Mandarin 
     [resume_overseas_experience] => No 
     [resume_degree] => BA 
     [resume_career_employment_status] => Employed 
    ) 
    [1] => Array (
     [resume_residence] => Barbados 
     [resume_language_fluently] => Mandarin 
     [resume_language_professional] => Spanish 
     [resume_language_basic] => Mandarin 
     [resume_overseas_experience] => No 
     [resume_degree] => BA 
     [resume_career_employment_status] => Unemployed 
    ) 
    [2] => Array (
     [resume_residence] => Barbados 
     [resume_language_fluently] => Mandarin 
     [resume_language_professional] => Spanish 
     [resume_language_basic] => Mandarin 
     [resume_overseas_experience] => No 
     [resume_degree] => FBA 
     [resume_career_employment_status] => Employed 
    ) 
    [3] => Array (
     [resume_residence] => Barbados 
     [resume_language_fluently] => Mandarin 
     [resume_language_professional] => Spanish 
     [resume_language_basic] => Mandarin 
     [resume_overseas_experience] => No 
     [resume_degree] => FBA 
     [resume_career_employment_status] => Unemployed 
    ) 
) 
+0

実際には、メインセットから作成されたサブセットの数のように動作するはずです。同様に、以下のような組み合わせで4つの配列を作成する必要があります ---- ["resume_degree"] =>文字列(2) "BA" ["resume_career_employment_status"] => string(2) "Employed" ---- ["resume_degree"] =>文字列(2) "BFA" ["resume_career_employment_status"] =>文字列(2) "雇用" ---- ["resume_degree" [ "resume_career_employment_status"] =>ストリング(2) "無職" ---- [ "resume_degree"] =>ストリング(2) "BFA" [ "resume_career_employment_status"] =>ストリング(2) "無職" – Sufyan

+0

あなたがこれらの説明を書いた後、私は自分の答えを更新しました。 – trincot

+0

サブアレイの数とその要素は異なる場合があります。これは、それぞれ2つのサブアレイと2つのエレメントを有するアレイの単なる例であるが、それぞれ3,2および4フィールドを有する3つのサブアレイのように変化し得る。 あなたが提供するコードは静的なキー値を使用していますが、配列自体からすべてのキーを取るべきコードが必要です... – Sufyan