2017-01-04 14 views
2

1次元配列から多次元連想配列の作成: - :基本的にPHPが - 次のように私はPHPの配列を持っている

None 
Bandolier 
Bandolier; Canteen 
Bandolier; Canteen; Satchel 
Canteen 
Canteen; Satchel 
Satchel 

- 私は何を出力したいのは、次の

$arrEquip = array("None", "Bandolier", "Canteen", "Satchel"); 

です各配列要素の後にリストされた他のすべての配列要素を持つ必要があります。

私は、連想多次元配列の作成がうまくいくと考えました。初期キーを作成し、値のために再び単一の配列を実行するforeachループを実行します。しかし、私はそれらをすべて一緒に組み合わせる方法を知らない。

単一配列には、任意の数の要素を含めることができます。

編集:申し訳ありませんが、PHPコードを忘れてしまった

$arrEquip = array("None", "Bandolier", "Canteen", "Satchel"); 
$rowCount = count($arrEquip); 
$keyVal = ""; 
$i = 0; 

foreach ($arrEquip as $key) { 
    $keyVal = ""; 
    if (strtoupper($key) !== "NONE") { 
     for ($y = ($i + 1); $y < $rowCount; $y++) { 
      $keyVal = $keyVal . $arrEquip[$y] . "; "; 
     } 
    } 
    $arrOutput[$key] = $keyVal; 
    $i++; 
} 

出力は次のようになります -

Array 
(
    [None] => 
    [Bandolier] => Canteen; Satchel; 
    [Canteen] => Satchel; 
    [Satchel] => 
) 

EDIT2:ちょうど私の所望の出力が間違って実現。する必要があります: -

Array 
(
    [0] => None 
    [1] => Bandolier 
    [2] => Bandolier; Canteen 
    [3] => Bandolier; Canteen; Satchel 
    [4] => Bandolier; Satchel 
    [5] => Canteen 
    [6] => Canteen; Satchel 
    [7] => Satchel 
) 

申し訳ありませんが混在しています。

+0

あなたはまだ試していたあなたのコードを表示してください。 – Deep

答えて

0

完璧なソリューション(あなたが今、適切な方法で再インデックス配列に持って): -

<?php 


$test = array("None", "Bandolier", "Canteen", "Satchel"); 

$return = uniqueCombination($test); 
//echo "<pre>";print_r($return); 
//Sort 
sort($return); 

//Pretty Print 
$final_arr = array_map(function($v){ return implode("; ", $v); }, $return); 

foreach ($final_arr as $key=>$val){ 
    if(strpos($val,$test[0].'; ') === 0){ 
     unset($final_arr[$key]); 
    } 
} 
echo "<pre/>";print_r(array_values($final_arr)); 



function uniqueCombination($in, $minLength = 1, $max = 2000) { 
    $count = count($in); 
    $members = pow(2, $count); 
    $return = array(); 
    for($i = 0; $i < $members; $i ++) { 
     $b = sprintf("%0" . $count . "b", $i); 
     $out = array(); 
     for($j = 0; $j < $count; $j ++) { 
      $b{$j} == '1' and $out[] = $in[$j]; 
     } 

     count($out) >= $minLength && count($out) <= $max and $return[] = $out; 
     } 
    return $return; 
} 
?> 

出力: - https://eval.in/708900

+0

パーフェクト、ありがとう。 – MMCB

0

シンプルな1つの空の配列を0〜7の長さにしておき、array_combine関数を使用して現在の配列を新しいインデックス配列にマージします。

関連する問題