2017-01-07 2 views
-2

В принципе, я хотел бы построить функцию, которая будет принимать N-параметры (или массив переменной длины, что угодно) и выкачать массив строк, подобных этому. .Итеративная замена строки с n-массивом при сохранении порядка

doTheThing("First", "Second", "Third"); 

array(
First_Second_Third 
First_Second_0 
First_0_Third 
First_0_0 
0_Second_Third 
0_Second_0 
0_0_Third 
0_0_0 
) 

Порядок результатов очень важен. Я думаю, что знаю, как это сделать, если бы у меня был массив статической длины, но я не могу работать, где я могу использовать массивы переменной длины.

+1

Можете ли вы показать, что вы пробовали? – Danielius

+0

Ну, это всего лишь случай проб и ошибок. Код что-то, протестируйте его, исправьте все проблемы, повторите тест. ___ Его называют разработкой по причине___ – RiggsFolly

ответ

0

вот что я придумал

function doTheThing(array $params){ 
    $set_len = count($params); 
    $result = []; 
    $result_len = 1 << $set_len; 
    for ($c = 0; $c < $result_len; $c++){ 
     $pattern = str_split(sprintf("%0{$set_len}s", decbin($c)), 1); 
     $result[] = implode('_', array_map(
      function($input, $flag){ return $flag ? 0 : $input;}, 
      $params, $pattern 
     )); 
    } 
    return $result; 
} 

var_dump(doTheThing(['one', 'two', 'three', 'four', 'five'])); 
+0

Фантастическое решение и работает точно так, как ожидалось. Большое спасибо. Пройдя через него, я думаю, что понимаю, что вы сделали. –

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