Слияние/ умножение пропущенного значения в массиве

#php

#php

Вопрос:

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

Первый массив:

  ["Services"]=>
  array(2) {
    [0]=>
    string(15) "Website Service"
    [1]=>
    string(17) "WordPress Service"
  }
  

Второй массив:

 ["City"]=>
  array(3) {
    [0]=>
    string(7) "New York"
    [1]=>
    string(6) "Los Angeles"
    [2]=>
    string(7) "Chicago"
  }
  

я хочу объединить его, например, умножить 3 * 2 = 6:

 array(6){
    0 =>  [
        "Service" => "Website Service",
        "City" => "New York"
    ],
    1 =>  [
        "Service" => "Website Service",
        "City" => "Los Angeles"
    ],
    2 =>  [
        "Service" => "Website Service",
        "City" => "Chicago"
    ],
    3 =>  [
        "Service" => "Wordpress Service",
        "City" => "New York"
    ],
    4 =>  [
        "Service" => "Wordpress Service",
        "City" => "Chicago"
    ],
    5 =>  [
        "Service" => "Wordpress Service",
        "City" => "Los Angeles"
    ],
}
  

Забудьте упомянуть, что массив будет динамическим. Не только 2 в текущем примере!
Заранее спасибо

Комментарии:

1. Пожалуйста, используйте var_export() в следующий раз.

2. да, конечно, извините, я немного расстроился 🙂

3. @Dharman да, обновленный вопрос.

4. @Capripio для динамических входных массивов я опубликовал ответ, в котором вы можете добавить несколько входных массивов без добавления нескольких циклов for для получения комбинаций.

5. @SatishSaini, Готово, спасибо!

Ответ №1:

Если существуют динамические входные массивы, то вам нужно подумать о рекурсивном решении при их объединении.

Вот рабочее решение:

 // function to make combinations of input arrays
function combinations($arrays) {
    $result = array(array());
    foreach ($arrays as $property => $property_values) {
        $tmp = array();
        foreach ($result as $result_item) {
            foreach ($property_values as $property_value) {
                $tmp[] = array_merge($result_item, array($property => $property_value));
            }
        }
        $result = $tmp;
    }
    return $result;
}
$combinations = combinations(
    array(
        'Services' => array('Website Service', 'Wordpress Service'), // this can be your services array
        'City' => array('New York', 'Chicago', 'Los Angeles'), // cities array
        'Zip' => array('90001', '90002'), // zip array and you can add more next to it
        // add more arrays here 
    )
);

// print all combinations
print_r($combinations);
  

Вот ДЕМО

Совет (добавляю его из-за предложенных изменений):

Вы также можете инициализировать массив, как [] в PHP 5.4 и более поздних версиях.

До версии PHP 5.4:

 $array = array();
  

PHP 5.4 и выше

 $array = [];
  

Нет никакой разницы в накладных расходах, потому что, насколько это касается компилятора / синтаксического анализатора, они полностью синонимичны. Если вам это нужно для поддержки старых версий PHP, используйте прежний синтаксис.