2017-01-04 2 views
2

У меня есть массив в PHP следующим образом: -PHP - Создание массива многомерные ассоциативный из одного одномерного массива

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

То, что я хочу, чтобы вывести следующий: -

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

В основном каждый элемент массива должен иметь после себя все остальные элементы массива.

Я думал, что создание ассоциативного многомерного массива будет работать. Выполнение цикла foreach, который создает исходные ключи, а затем снова запускает один массив для значений. Но я не знаю, как объединить их все вместе.

Единый массив может содержать в себе любое количество элементов.

EDIT: Извините, забыл код 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

Простой способ сделать один пустой массив длиной от 0 до 7, как вы предлагаете на примере, и использовать функцию array_combine для объединения вашего текущего массива с новым индексированным массивом.

Смежные вопросы