PHP - 打印所有组合 - 产品

时间:2015-08-26 14:04:40

标签: php

我试图解决一个有点简单的任务,但不能在没有很多循环和乱码的情况下完成它。

我希望所有人都打印下面数组的所有组合:

$product = array(
    array
    (
        '1X'
    ),
    array
    (
        'X2'
    )
);

产生以下结果:

  

// ROW 1
  1
  X

     

// ROW 2
  X
  2

     

// ROW 3
  1
  2

     

// ROW 4
  X
  X

2 个答案:

答案 0 :(得分:1)

这项工作:

$product = array(
    array
    (
        '1WQ'
    ),
    array
    (
        '3'
    ),
    array
    (
        'X'
    )
);
//
class Combine{
    private $product = array();
    private $result = array();
    private $format = array();
    public function __construct($p=array()){
        $this->product = $p;
    }
    public function process(){
        foreach($this->product as $k=>$v){
            $this->format[] = str_split($v[0]);
        }
        $this->result = $this->build();
        return $this;
    }
    public function build()
    { 
        if (!$this->format) {
            return array(array());
        }
        $sub = array_shift($this->format);
        $c = $this->build($this->format);
        $res = array();
        foreach ($sub as $v) {
            foreach ($c as $p) {
                array_unshift($p, $v);
                $res[] = $p;
            }
        }
        return $res;        
    }
    public function response(){
        return $this->result;
    }
}
//
$combine = new Combine($product);
$resp = $combine->process()->response();
var_dump($resp);

答案 1 :(得分:0)

function helperFunction($array, $index, $workArray)
{
    $tempArray = array();
    $tmpStr    = $array[$index][0];

    // loop over the current array characters
    for( $i = 0; $i < strlen($tmpStr); $i++ )
    {
        $char = substr($tmpStr, $i, 1);

        // first time - add characters to the work array
        if (count($workArray) == 0)
        {
            $tempArray[] = $char;
        }
        // later round - add characters to existing items
        else
        {
            foreach ($workArray as $workItem)
            {
                $tempArray[] = $workItem . $char;
            }
        }
    }

    // last round
    if (count($array) == $index + 1)
    {
        return $tempArray;
    }
    // recursion round
    else
    {
        return helperFunction($array, $index + 1, $tempArray);
    }
}

$result = helperFunction($product, 0, array());
相关问题