我想在数组中删除(这是一个非常大的数组)所有超过15个字符的元素。这样做的最佳方式(性能)是什么?
答案 0 :(得分:1)
怎么样:
foreach($arr as $key => $val)
{
if(strlen($val) > 15)
{
unset($arr[$key]);
}
}
array_values($arr);
答案 1 :(得分:1)
将array_filter()
与回调函数一起使用:
$new = array_filter($array, function($elem) {
return strlen($elem) <= 15;
});
使用普通foreach
循环也可以这样做:
foreach ($array as $key => $value) {
if (strlen($value) > 15) {
unset($array[$key]);
}
}
答案 2 :(得分:0)
通过算法方面来看这个问题,你肯定必须通过数组并检查数组中字符的大小。如果size大于15,则必须删除该元素。未排序数组的最小复杂度为O(n)= n。你应该给我们一些你正在使用的代码和语言。
答案 3 :(得分:0)
我会选择:
$filteredArray = array_filter($array, function($item){
return strlen($item) < 15;
});
答案 4 :(得分:0)
DEMO LIVE:https://eval.in/86391
我已经完成了2D阵列。
<?php
$arr = array(0=>array(0=>"1111111111","1"=>"22222222222222222"),array(0=>"111111111111111111",1=>"14554545454"));
echo "BEFORE";
print_r($arr);
for($j =0; $j < count($arr);$j++){
foreach($arr[$j] as $k => $v){
if( strlen($arr[$j][$k]) > 15){
unset($arr[$j][$k]);
}
}
}
echo "AFTER";
print_r($arr);
对于1D数组:
$arr2 = array(0=>"1111111111","1"=>"22222222222222222");
echo "BEFORE";
print_r($arr2);
foreach($arr2 as $k => $v){
if( strlen($arr2[$k]) > 15){
unset($arr2[$k]);
}
}
echo "AFTER";
print_r($arr2);