#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, используйте прежний синтаксис.