如何在php中从多维数组创建自定义数组中的组合
我是数组新手,实际上我想从多维数组创建一个自定义数组。我有如下数组:-如何在php中从多维数组创建自定义数组中的组合,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我是数组新手,实际上我想从多维数组创建一个自定义数组。我有如下数组:- Array ( [0] => Array ( [0] => 30 [1] => 31 ) [1] => Array ( [0] => 4 [1] => 5 [2] => 32 ) [2] => Array ( [0] => 29
Array
(
[0] => Array
(
[0] => 30
[1] => 31
)
[1] => Array
(
[0] => 4
[1] => 5
[2] => 32
)
[2] => Array
(
[0] => 29
)
)
$filterids = $getfilterids; // that is saved in one variable.
目前只有三个阵列,将来可能会更多,这意味着它将拥有任意数量的阵列。所以我想与另一个elemnets数组进行组合,然后需要使用逗号(,)进行内爆。现在我希望输出如下内容:-
Array
(
[0] => 30,4,29
[1] => 30,5,29
[2] => 30,32,29
[3] => 31,4,29
[4] => 31,5,29
[5] => 31,32,29
)
我已搜索,但无法启动。请帮助我如何实现这类功能。
注意:-阵列可以更灵活,它应该是动态的。提前谢谢。希望这有帮助
foreach ($filterids as $val) {
$new_val[] = implode(',', $val);
}
print_r($new_val);
$filterids
将是多维数组
输出:最终从谷歌搜索。最后我找到了解决办法。希望它将来能帮助别人:-
function combinations($arrays, $i = 0) {
if (!isset($arrays[$i])) {
return array();
}
if ($i == count($arrays) - 1) {
return $arrays[$i];
}
$tmp = combinations($arrays, $i + 1);
$result = array();
foreach ($arrays[$i] as $v) {
foreach ($tmp as $t) {
$result[] = is_array($t) ?
implode(',',array_merge(array($v), $t)) :
implode(',',array($v,$t));
}
}
return $result;
}
$result = combinations($filterids); // call the function
echo "<pre>"; print_r($result); // echo the expected output
函数组合($arrays,$i=0){
if(!isset($arrays[$i])){
返回数组();
}
如果($i==count($arrays)-1){
返回$array[$i];
}
$tmp=组合($arrays,$i+1);
$result=array();
foreach($array[$i]作为$v){
foreach(tmp为$t){
$result[]=is_数组($t)?
内爆(“,”,数组_merge(数组($v),$t)):
内爆(“,”,数组($v,$t));
}
}
返回$result;
}
$result=组合($filterids);//调用函数
回声“;打印($result);//响应预期的输出
O(nm**2)n是数组的长度,m是其最长元素的长度您可以开始将此问题视为输入中数组的“笛卡尔积”,然后对笛卡尔积应用格式化函数。笛卡尔积的算法是众所周知的,您可以在这里查看以供参考: 我建议使用一个通用的“笛卡尔积”函数,您可以在代码中重用它 以下是建议的解决方案:
array(6) {
[0]=>
string(7) "30,4,29"
[1]=>
string(7) "30,5,29"
[2]=>
string(8) "30,32,29"
[3]=>
string(7) "31,4,29"
[4]=>
string(7) "31,5,29"
[5]=>
string(8) "31,32,29"
}
output is equal to expected
你认为这是正确的吗?你是否测试了-1 fr meYes,请检查链接请检查我的预期输出请检查我的预期输出。。。我想要其他数组元素的组合
<?php
$input = Array
(
0 => Array
(
0 => 30,
1 => 31
),
1 => Array
(
0 => 4,
1 => 5,
2 => 32
),
2 => Array
(
0 => 29
)
);
$expected = Array
(
0 => "30,4,29",
1 => "30,5,29",
2 => "30,32,29",
3 => "31,4,29",
4 => "31,5,29",
5 => "31,32,29"
);
//make an intermediate array with the cartesian product of the $input array
$intermediate = cartesian($input);
// and then apply the "implode" function to format the output as requested.
$output = array_map(function($v) {
return implode(",", $v);
}, $intermediate);
var_dump($output);
if( ($output === $expected)) {
echo "output is equal to expected" .PHP_EOL;
} else {
echo "not equals" .PHP_EOL;
}
function cartesian($input) {
$result = array(array());
foreach ($input as $key => $values) {
$append = array();
foreach($result as $product) {
foreach($values as $item) {
$product[$key] = $item;
$append[] = $product;
}
}
$result = $append;
}
return $result;
}
array(6) {
[0]=>
string(7) "30,4,29"
[1]=>
string(7) "30,5,29"
[2]=>
string(8) "30,32,29"
[3]=>
string(7) "31,4,29"
[4]=>
string(7) "31,5,29"
[5]=>
string(8) "31,32,29"
}
output is equal to expected