我有一个多维数组,我想要的是每个第二级数组值限制应该只设置为4。就像我有一个类型的数组:
Array
(
[test2] => Array
(
[0] => Array
(
[application_id] => 405275016
)
[1] => Array
(
[application_id] => 405275016
)
[2] => Array
(
[application_id] => 303198288
)
[3] => Array
(
[application_id] => 303841592
)
)
[test3] => Array
(
[0] => Array
(
[application_id] => 289267216
)
[1] => Array
(
[application_id] => 303198216
)
[2] => Array
(
[application_id] => 405275016
)
[3] => Array
(
[application_id] => 303198288
)
[4] => Array
(
[application_id] => 303841592
)
[5] => Array
(
[application_id] => 311430400
)
[6] => Array
(
[application_id] => 318096216
)
[7] => Array
(
[application_id] => 320256352
)
)
)
以及我想要的内容如果内部数组值超过5计数,则不应该向其添加任何其他值。我必须将上面的数组格式化为:
Array
(
[test2] => Array
(
[0] => Array
(
[application_id] => 405275016
)
[1] => Array
(
[application_id] => 405275016
)
[2] => Array
(
[application_id] => 303198288
)
[3] => Array
(
[application_id] => 303841592
)
)
[test3] => Array
(
[0] => Array
(
[application_id] => 289267216
)
[1] => Array
(
[application_id] => 303198216
)
[2] => Array
(
[application_id] => 405275016
)
[3] => Array
(
[application_id] => 303198288
)
[4] => Array
(
[application_id] => 303841592
)
)
)
此处在第二个数组数组中,最后3个数组被截断,以便仅将5个计数作为值。我尝试了很多方法但没有达到这个目的。
关于如何实现这一目标的任何想法都将受到高度赞赏?
答案 0 :(得分:2)
$array = array_map(function ($arr) { return array_slice($arr, 0, 5); }, $array);
请注意,这使用PHP 5.3+语法。
如果你真的想要一个不能拥有5个以上元素的数组(或类似的东西),你需要实现一个自定义类(可能通过扩展ArrayObject)和/或玩SplFixedArray。
答案 1 :(得分:2)
或者您可以像这样使用array_slice函数:
foreach ($array as $key=>$value)
{
$array[$key] = array_slice($value, 0, 5);
}
答案 2 :(得分:1)
foreach ($array as $k => $v) { // Loop outer array
for ($i = 5; isset($array[$k][$i]); $i++) { // Loop inner array, starting at element #5
unset($array[$k][$i]); // unset all elements >=5
}
}
答案 3 :(得分:1)
PHP没有针对此行为的现成功能,您必须创建自己的函数来为数组添加值以实现此目的。 例如:
function array_add_value($array, $value) {
if(count($array) < 5) {
$array[] = $value;
}
}
如果您希望操作已经包含太多元素的现有数组,则必须为此创建类似的函数 例如:
function fix_array($array) {
if(count($array) > 5) {
for($i=4;$i<count($array);$i++) {
unset($array[$i]);
}
}
}