Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перебор всех возможных комбинаций
 
 автор: kisit   (13.05.2009 в 19:57)   письмо автору
 
 

Есть массив:

$array[0] = 'nokia';
$array[1] = 'connection';
$array[2] = 'people';

Нужно перебрать все возможные комбинации элементов массива.
Например:
nokia connection people
people connection nokia
connection people nokia
и т.д.
Понимаю что нужно рекурсивно пробегаться по массиву, но пока не могу понять как это сделать правильно. Большое спасибо за помощь!

  Ответить  
 
 автор: nikita2206   (13.05.2009 в 20:29)   письмо автору
 
   для: kisit   (13.05.2009 в 19:57)
 

неужели это ТАК сложно?

<?php
$array
[0] = 'nokia';
$array[1] = 'connection';
$array[2] = 'people';
$array[3] = 'apple';
$array[4] = 'sony ericsson';
function 
rand_phrase($array){
    
$values = array();
    for(
$i 0; ; ){
        
$rands array_rand($arraycount($array));
        
$phrase '';
        foreach(
$rands as $rand){
            
$phrase .= $array[$rand].' ';
        }
        
$phrase trim($phrase);
        if(
in_array($phrase$values)) $i++;
        else{
            
$i--;
            
$values[] = $phrase;
        }
        if(
$i 10)    break;
    }
    return 
$values;
}
$array rand_phrase($array);
foreach(
$array as $x){
    echo 
$x."\r\n<br />";
}


или так:

<?php
$array
[0] = 'nokia';
$array[1] = 'connection';
$array[2] = 'people';
$array[3] = 'apple';
$array[4] = 'sony ericsson';
function 
rand_phrase($array){
    
$values = array();
    for(
$i 0; ; ){
        
$rands array_rand($arraymt_rand(2count($array)));
        
$phrase '';
        foreach(
$rands as $rand){
            
$phrase .= $array[$rand].' ';
        }
        
$phrase trim($phrase);
        if(
in_array($phrase$values)) $i++;
        else{
            
$i--;
            
$values[] = $phrase;
        }
        if(
$i 50) break;
    }
    return 
$values;
}
$array rand_phrase($array);
foreach(
$array as $x){
    echo 
$x."\r\n<br />";
}

  Ответить  
 
 автор: $   (13.05.2009 в 21:07)
 
   для: nikita2206   (13.05.2009 в 20:29)
 

ты с Нижнего Тагила? Это пи..ц )

  Ответить  
 
 автор: nikita2206   (13.05.2009 в 21:11)   письмо автору
 
   для: $   (13.05.2009 в 21:07)
 

а ты можешь лучше?
воображения никакого, с нижнего тагила ха, немог че лучше придумать?

  Ответить  
 
 автор: @@@   (13.05.2009 в 21:44)
 
   для: nikita2206   (13.05.2009 в 21:11)
 

пожалуйста, парень с нижнего тагила )
<?php

$array
[0] = 'nokia'
$array[1] = 'connection'
$array[2] = 'people';

function 
g(&$a$k=0)
{

    if( 
$k == count($a) - )
        echo 
implode(', '$a), '<br/>';
    else
    {
        for(
$i $k$i count($a); $i++)
        {
            list(
$a[$k], $a[$i]) = array($a[$i], $a[$k]);
            
g($a$k+1);
            list(
$a[$k], $a[$i]) = array($a[$i], $a[$k]);
        }
    }
}

g($array);

?>

  Ответить  
 
 автор: kisit   (14.05.2009 в 10:47)   письмо автору
 
   для: @@@   (13.05.2009 в 21:44)
 

большое спасибо!!!!!

  Ответить  
 
 автор: Port_Artur3   (10.07.2015 в 14:12)   письмо автору
 
   для: kisit   (14.05.2009 в 10:47)
 

А как в этой функции вернуть результат через Return?

<?php 

$array
[0] = 'nokia';  
$array[1] = 'connection';  
$array[2] = 'people'

function 
g(&$a$k=0


    if( 
$k == count($a) - 
        echo 
implode(', '$a), '<br/>'
    else 
    { 
        for(
$i $k$i count($a); $i++) 
        { 
            list(
$a[$k], $a[$i]) = array($a[$i], $a[$k]); 
            
g($a$k+1); 
            list(
$a[$k], $a[$i]) = array($a[$i], $a[$k]); 
        } 
    } 


g($array); 

?>

  Ответить  
 
 автор: renex   (16.07.2015 в 21:27)   письмо автору
 
   для: Port_Artur3   (10.07.2015 в 14:12)
 

<?
$array
[0] = 'nokia'
$array[1] = 'connection'
$array[2] = 'people'
 
function 
g(&$a$k=0, &$result


    if( 
$k == count($a) - ) {
        
//echo implode(', ', $a), '<br/>';
        
$result[] = $a;
    }    
    else 
    { 
        for(
$i $k$i count($a); $i++) 
        { 
            list(
$a[$k], $a[$i]) = array($a[$i], $a[$k]); 
            
g($a$k+1$result); 
            list(
$a[$k], $a[$i]) = array($a[$i], $a[$k]); 
        } 
    } 


function 
getVariables(array $a){
    
$result = array();
    
g($a0$result);      
    return 
$result;
}



$result getVariables($array);

echo 
"<pre>";
print_r($result);
echo 
"</pre>";
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования