如何为数组操作编写函数?

时间:2015-11-08 19:44:24

标签: php arrays

我需要创建一个没有近亲繁殖的逻辑关系 ...(动物穿越)

A B C D E

每个字母都在一个系列下方,从2到N (用户输入)

数组:

a   b    c  d    e  f 

第1步(打印:)

ab  bc  cd  de  ef  fa 

第2步(打印:)

abcd    bcde    cdef    defa    efab    fabc

结束那里,因为例如,如果你试图越过abcd,其他人至少有一个字母

一些规则 - 元素不能在任何阶段重复,例如:AA ou BB..CC..DD - 组中的元素可能不会出现在下一个...第3阶段的示例:

STRING: AB BC CD DE EA

错误 - > AB BC

正确 - > AB CD

  • 第一阶段,只需打印数组的每个元素
  • 第二阶段,使用下一个元素打印每个元素,使用第一个元素打印最后一个...
  • 三个阶段,打印每个家庭的4个元素......

有什么想法吗?

更新

在我的数据库中,我有一个数组:

例如: [ “Fish1”, “FishEx3”, “FishExample”, “FishSpecie”, “FishOtherSpecie”]

我需要使用此函数来解析它。

3 个答案:

答案 0 :(得分:0)

使用此功能:

$arr = ['a', 'b', 'c', 'd', 'e', 'f'];

print_stage1($arr);
print_stage2($arr);
print_stage3($arr);

function increment($total, $pos, $inc){
    if($pos + $inc < $total)
        return $pos + $inc;
    else
        return ($pos + $inc) - $total;
}

function print_stage1($arr){
    foreach($arr as $key => $family){
        print $arr[$key]. " ";
    }
}

function print_stage2($arr){
    $total = count($arr);
    foreach($arr as $key => $family){
        $next_key = increment($total, $key, 1);
        print $arr[$key] . $arr[$next_key]. " ";
    }
}

function print_stage3($arr){
    $total = count($arr);
    foreach($arr as $key => $family){
        $next1 = increment($total, $key, 1);
        $next2 = increment($total, $key, 2);
        $next3 = increment($total, $key, 3);
        print $arr[$key] . $arr[$next1]. $arr[$next2]. $arr[$next3]. " ";
    }
}

答案 1 :(得分:0)

您所解释的是一个非常简单的独特组合问题,可以通过堆栈解决。通过一次移出/弹出一个元素离开数组/堆栈并将其与另一个元素连接起来,最终会耗尽阵列。为了进一步的组合,你可以多次重复这个。

这是一个例子。

function combine(Array $stack)
{
    $newStack = [];
    $lastElement = array_shift($stack);
    while($nextElement = array_shift($stack)) { // shift
        $newStack[] = $lastElement . $nextElement; // push
        $lastElement = $nextElement;
    }
    return $newStack;
}



var_dump($level1 = combine(['a','b','c','d','e','f']), $level2 = combine($level1));

结果是......

array(5) {
  [0]=>
  string(2) "ab"
  [1]=>
  string(2) "bc"
  [2]=>
  string(2) "cd"
  [3]=>
  string(2) "de"
  [4]=>
  string(2) "ef"
}
array(4) {
  [0]=>
  string(4) "abbc"
  [1]=>
  string(4) "bccd"
  [2]=>
  string(4) "cdde"
  [3]=>
  string(4) "deef"
}

答案 2 :(得分:0)

它不是一个漂亮的解决方案,但它有效。 PHP Fiddle

function Crossbreed($species = array())
{
    if (empty($species)) {
        return array();
    }

    $half_way = array();
    $output = array();
    $species_length = count($species) - 1;

    foreach ($species as $index => $specie) {
        $next = $index + 1;
        if ($index >= $species_length) {
            $next = $index - $species_length;
        }
        $half_way[] = $specie . $species[$next];
    }

    foreach ($half_way as $index => $specie) {
        $next = $index + 2;
        if ($next >= $species_length + 1) {
            $next = $next - $species_length - 1;
        }
        $output[] = $specie . $half_way[$next];
    }

    return $output;
}

$species = array("Fish1","FishEx3","FishExample","FishSpecie","FishOtherSpecie");

$crossbred = Crossbreed($species);

$half_way变量的输出(数组中的数字是否易于阅读)

Array ( 
    [0] => 12 
    [1] => 23  
    [2] => 34  
    [3] => 45  
    [4] => 56  
    [5] => 67  
    [6] => 78  
    [7] => 89  
    [8] => 91 
)

函数的输出(数组中的数字是否易于阅读)

Array (  
    [0] => 1234  
    [1] => 2345  
    [2] => 3456  
    [3] => 4567  
    [4] => 5678  
    [5] => 6789  
    [6] => 7891  
    [7] => 8912  
    [8] => 9123 
)