2015-02-24 132 views
1

X陣列我有一個多維陣列是這樣的:限制多維數組內

$my_array = array(

    array($user_id, $id, $type, $log, $url, $timestamp), 
    array($user_id, $id, $type, $log, $url, $timestamp), 
    array($user_id, $id, $type, $log, $url, $timestamp), 
    // and so on... 
); 

$my_array具有內部陣列的隨機量。我想限制在$my_array內數組的數量爲5。我怎樣才能做到這一點?因此,如果內部有5個陣列,並且還添加了一個,則刪除最後一個陣列...

+0

的開始添加一個元素,然後[array_slice](http://www.php.net/array_slice)($ array,-5)? – 2015-02-24 19:03:04

+0

@JonathanKuhn你可以發表一個答案,詳細說明如何? – 2015-02-24 19:03:44

回答

1

添加新值,然後致電array_slice

如果你想添加到數組的末尾:

//array with more than 5 
$array = range(1, 8); // [1, 2, 3, 4, 5, 6, 7, 8] 
//add the element 
$array[] = 9; 
//get the last 5 
$array = array_slice($array, -5); 

//output: [5, 6, 7, 8, 9] 

http://codepad.viper-7.com/DL91ZK

如果要添加到陣列

//array with more than 5 
$array = range(1, 8); // [1, 2, 3, 4, 5, 6, 7, 8] 
//add to the array 
array_unshift($array, 0); 
//get the first 5 
$array = array_slice($array, 0, 5); 

//output: [0, 1, 2, 3, 4] 

http://codepad.viper-7.com/RGfohJ

+0

這是非常好的朋友,謝謝。 – 2015-02-25 14:51:41

2

只需使用函數向其中添加數組,然後執行檢查。例如

function addToArray($arr, $newValue, $limit=5) { 
    if (count($arr) >= $limit) { 
     array_shift($arr); 
    } 
    $arr[] = $newValue; 

    return $arr; 
} 

函數array_shift刪除第一個元素並返回縮短的數組。

如果有可能的東西被添加到該功能之外的陣列,可以概括:

function addToArray($arr, $newValue, $limit=5) { 
    while (count($arr) >= $limit) { 
     array_shift($arr); 
    } 
    $arr[] = $newValue; 

    return $arr; 
} 

編輯:喬納森·庫恩建議加改進。

+0

只是一些澄清。在函數中,我是否返回$ my_array變量? – 2015-02-24 19:09:23

+0

首先,如果數組有多於5個元素,則這將只刪除1.其次,array_shift將數組作爲引用並返回移位的值,而不是具有少於1個元素的原始數組。原始數組被修改爲少1。 – 2015-02-24 19:10:35

+0

感謝您在編寫array_shift時指出大腦褪色。你是正確的,原來不認爲可以將該條目添加到該函數以外的數組。我根據您的建議添加了一個變體。 – bobdye 2015-02-24 19:16:16