PHP - dizileri içinde Desenler

6 Cevap php

Ben bir dizi kullanarak tamsayılar yinelenen bir desen eşleştiren bir fonksiyon oluşturmak için çalışıyorum.

I (0,1,3) başlayan bir dizi var ve eğer bir örnek olarak ben 15 vurduğunuzda ben desen durdurmak istediğini biliyorum.

Desen sabit bir tamsayı ile her zaman artırılır (4 diyelim) bu yüzden benim son model olmalı ..

0
1
3
4 (0 + 4)
5 (1 + 4)
7 (2 + 4)
8 (4 + 4)
9 (5 + 4)
11(7 + 4)
12(8 + 4)
13(9 + 4)
15(11+ 4)

Herkes bu nasıl sağlanabilir üzerinde herhangi bir işaretçiler var mı?

Benim şu anki uygulama çalışıyor ancak böyle aptalca verimsiz olan bir şeydir ...

$array = array(0,1,3);
$inc = 4;
$end = end($array);
$final = 15;

while($end < $final)
{
$tmp = array();
foreach($array AS $row)
{
$tmp = $row + $inc;
}
$array = merge($tmp, $array);
$end = end($array);
}

6 Cevap

I assume that you want to have all the new values in the same array. So:

//original array
$values =  array(0, 1, 3);

//incremental value
$inc = 4;
//stop value
$stop = 15;

//set the index counter to the origin
$curr_index = 0;

//while the last value of the array is lower than the stop value
while($values[end($values)] < $stop)
{
    //calculate the new value
    $new_value = $values[$curr_index] + $inc;
    //add the new value to the array
    array_push($values, $new_value);
    //update the index counter
    $curr_index ++;
}

Bu kod dizinin, herhangi bir artışlı değer ve herhangi bir durdurma herhangi bir değer başlangıç ​​değeri için çalışması gerekir.

$array = array(0,1,3);
$inc = 4;
$final = 15;
$end = end($array);

while($end < $final)
{
  $end += $inc;
  $array[] = $end;
}

Ya da döngü için bir ile:

$array = array(0,1,3);
$inc = 4;
$final = 15;

for($i = end($array) + $inc; $i <= $final; $i += $inc)
{
  $array[] = $i;
}

Hepiniz 4 son değeri 2 tuşları geri dizideki değere değil ilave ediliyor gerçeğini eksik.

Bu ihtiyaç kodu (test ve çalışma)

$array = array(0,1,3);
$inc = 4;
$end = end($array);
$key = key($array);
$final = 15;

while ($end < $final) {
    if ($array[$key-2] >= 0) {
        $end = $array[$key-2] + $inc;
        $array[] = $end;
        $key++;
    }
}

Ben de orada bu gerekli olmayabilir ama anahtar, aslında var eklenen emin olmak için bir kontrol dahil.

<?php

function myArrayFunction(array $array, $inc = 4, $final = 15, $end = null)
{
    if(!$end)
    {
        $end = end($array);
    }

    while($end < $final)
    {
        $end += $inc;
        $array[] = $end;
    }

    return $array; //assume you're wanting $array back
}

Bu eksi enjekte değerlerin test veya kontrol herhangi bir tür ama fikir olsun.

Eğer her şey korkunç overcomplicated görünüyor burada ulaşmak için çalışıyoruz bilmek iyi olabilir, ama ... olur

$array = array(0,1,3);
$pattern = array();
$inc = 4;
$final = 15;

for ($base = 0; ; $base += $inc) {
  foreach($array as $rem) {
    if ($base + $rem > $final) break 2;
    $pattern []= $base + $rem;
  }
}

Seçenek olarak,

$i = $v = 0;
while ($v < $final) {
  $v = $pattern []= $pattern[$i++] + $inc;
}

(Bu $final desen parçası olacak varsayar.)

Hesaplamak için nasıl anlamaya eğer elemanların sayısı önceden dizide olması ve bu çalışması gerekir TUM $ o atar.

<?php

$arr = array(0, 1, 3);
$inc = 4; // 6
$fin = 15; // 55
$num = count($arr);
$lum = 0;
$tum = 12; // 29

do
{
    for($i = $lum; $i < $num; $i++)
    {
        $tar        = $arr[$i] + $inc;
        $arr[$tar]  = $tar;
    }
    $lum = $num;
    $num *= 2;
} while(end($arr) < $fin);

$arr = array_slice($arr, 0, $tum);

print_r($arr);
echo "\n";

?>