0

たとえば、私は配列を持っています:

$array = array(25, 50, 75, 100); // I get an array of some numbers
$position = 50; // I get some value to start with
$limit = 3; // I need to fill another array with 3 next values from the starting position

そして今、私がこのように新しい配列を埋めるために使用する必要があるコード:

$new_array = array(75, 100, 25); // the start position is 50, but I need the next 3

何か案は??

4

3 に答える 3

2

ロジックを抽象化する関数があるのが好きです。したがって、配列、開始位置、および制限を取得する関数を作成することをお勧めします。

<?php
function loop_array($array,$position,$limit) {

    //find the starting position...
    $key_to_start_with = array_search($position, $array);
    $results = array();

    //if you couldn't find the position in the array - return null
    if ($key_to_start_with === false) {
        return null;
    } else {
            //else set the index to the found key and start looping the array
        $index = $key_to_start_with;
        for($i = 0; $i<$limit; $i++) {
                    //if you're at the end, start from the beginning again
            if(!isset($array[$index])) {
                $index = 0;
            }
            $results[] = $array[$index];
            $index++;
        }
    }
    return $results;
}

これで、次のような任意の値で関数を呼び出すことができます。

$array = array(25, 50, 75, 100);
$position = 75;
$limit = 3;

$results = loop_array($array,$position,$limit);

if($results != null) {
    print_r($results);
} else {
    echo "The array doesn't contain '{$position}'";
}

出力

Array
(
    [0] => 75
    [1] => 100
    [2] => 25
)

または、他の値でループすることもできます。

$results = loop_array(array(1,2,3,4,5), 4, 5);

実例は次のとおりです:http://codepad.org/lji1D84J

于 2012-10-26T23:39:18.500 に答える
2

array_searchを使用して、配列内のキーワードの位置を見つけることができます。%最後に到達した後に最初の要素に移動するための算術演算子。残りはあなたの論理です。

<?php
    $array = array(25, 50, 75, 100);
    $position = 10;
    $limit = sizeof($array)-1;

    $pos = array_search($position, $array);;

    if(!($pos === false))
    {
        for($i=0;$i<$limit;$i++)
        {
            $pos = (($pos+1)%sizeof($array));
            echo $array[$pos]."<br>";
        }
    }
    else
    {
        echo "Not Found";
    }
?>
于 2012-10-26T23:21:42.480 に答える
1

array_slice()array_merge()を使用して目標を達成できます。

50 の位置が 2 であることがわかっているとします。

次に、次の方法で新しい配列を取得できます-

array_slice(array_merge(array_slice($array, 2), array_slice($array, 0, 2)), 3);

基本的には、開始位置から 2 つの部分配列を取得し、それらを連結して、末尾部分を削除します。

于 2012-10-26T23:24:51.980 に答える