Php 从数组中查找组合
我想把每个组合都打印出来。。比如(joe,tom,dan),(joe,tom,mary),对于每个组合,只从每个数组中选择1个。依此类推,直到没有更多的组合。在这之后,我想把它们发布到我网站上的3张帖子上。。我知道如何做到这一点,但我被困在这个组合部分Php 从数组中查找组合,php,combinations,permutation,Php,Combinations,Permutation,我想把每个组合都打印出来。。比如(joe,tom,dan),(joe,tom,mary),对于每个组合,只从每个数组中选择1个。依此类推,直到没有更多的组合。在这之后,我想把它们发布到我网站上的3张帖子上。。我知道如何做到这一点,但我被困在这个组合部分 很难解释。。希望您已经理解。您可以使用3个for循环: $array1=["joe","bob"]; $array2=["tom","bill"]; $array3=["dan","mary"]; 当没有名声是不允许的时候 $combinati
很难解释。。希望您已经理解。您可以使用3个for循环:
$array1=["joe","bob"];
$array2=["tom","bill"];
$array3=["dan","mary"];
当没有名声是不允许的时候
$combinations = new ArrayObject();
foreach ($array1 as $name1) {
foreach ($array2 as $name2) {
foreach ($array3 as $name3) {
$combinations->append(array($name1, $name2, $name3));
}
}
}
是否允许重复?对我相信排列对我来说是正确的术语;它给了我一个大网()。因为我试图用cURL发布每个数组,所以我可以将它作为每个组合的一个数组进行回显吗?它是一个数组数组。每个数组都是一个组合[name1,name2,name3]。它已经是每个组合的一个数组:$combines[0]
它是第一个组合,$combines[1]
第二个组合等等。您可以“很好地”打印它,例如使用foreach($c组合){print join($c,”,”)。\n;}
您是一个救生员。你能解释一下append()吗?我不理解php.net的解释,它只是在末尾添加了元素。它与$combines[]=new_元素
相同;只是我来自python,那里不存在这种语法,而append()
经常使用:)你们两个都很好!我希望我能给你们两个正确的答案@用户2318029如果你想相信我,你也可以投票。。我需要15个名声。
<?php
$array1=["joe","bob"];
$array2=["tom","bill"];
$array3=["dan","mary"];
$arr = array_merge($array1,$array2,$array3);
$result = array();
function noRepeatation($arr, $temp_string, &$collect) {
if ($temp_string != "")
$collect []= $temp_string;
for ($i=0; $i<sizeof($arr);$i++) {
$arrcopy = $arr;
$elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element
if (sizeof($arrcopy) > 0) {
noRepeatation($arrcopy, $temp_string ." " . $elem[0], $collect);
} else {
$collect []= $temp_string. " " . $elem[0];
}
}
}
$collect = array();
noRepeatation($arr, "", $collect);
print_r($collect);
?>
<?php
$array1=["joe","bob"];
$array2=["tom","bill"];
$array3=["dan","mary"];
$arr = array_merge($array1,$array2,$array3);
$result = array();
function repeatation($arr, $level, &$result, $curr=array()) {
for($i = 0; $i < count($arr); $i++) {
$new = array_merge($curr, array($arr[$i]));
if($level == 1) {
sort($new);
if (!in_array($new, $result)) {
$result[] = $new;
}
} else {
repeatation($arr, $level - 1, $result, $new);
}
}
}
for ($i = 0; $i<count($arr); $i++) {
repeatation($arr, $i+1, $result);
}
foreach ($result as $arr) {
echo join(" ", $arr) . '<br>';
}
?>