2015-02-24 43 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