使用php检索数组中的最后一个值

问题描述:

我有一个数组名arrayname并在下面的图像中有一些值。使用php检索数组中的最后一个值

enter image description here

我怎样才能在阵列arrayname即使在arrayname1[7]为空值的最后一个值。这应该忽略空值并给出最终答案。

筛选出空值,取最后一个值:

$array = array_filter($arrayname1); 
$lastValue = end($array); 
+1

这是最好的和短代码。 – Rafee 2011-12-27 06:47:15

有没有办法找到你需要的空值,但还有另一种方法来创建另一个数组并找到最终值。

下面是一个示例实施例

<?php 
    $fruits = array('apple', 'banana', 'cranberry','', 'fadsf', '', ''); 
    echo "Count : " . count($fruits); 

    $k = count($fruits) - 1; 
    foreach($fruits as $pos => $v1) { 
     if($v1 != "") { 
      echo "$v1 <br>"; 
      $newarray1[] = $v1; 
     } 
    } 
    echo "<br>Last : " . end($newarray1); 
?> 
+1

为什么重新创建'array_filter'? – deceze 2011-12-27 06:45:05

使用

“isset()函数”,以查看是否有元件是 “空”。

使用“count()”来确定数组的长度。

基准:

我重做我自己的服务器上的标杆,因为键盘是由它给零星结果是零星的服务器负载,它使用的是旧版本的PHP。

结果:

(Target: 100003) 
Last Value: 100003 
array_filter took 8.4615960121155 seconds 
Last Value: 100003 
array_flip took 20.312706947327 seconds 
Last Value: 100003 
array_pop took 6.7329788208008 seconds 

基准脚本是:

$array=array(); 
for($run=0; $run<100000; $run++) 
{ 
$rand=rand(0,4); 
if ($rand===0) $array[]=''; else $array[]=(string)$rand+$run; 
} 
$save=$array; 

echo '(Target: '.end($array).")\n"; 
$time=microtime(true); 

for($run=0; $run<1000; $run++) 
{ 
$array=$save; 
$array = array_filter($array); 
$lastValue = end($array); 
} 

$time=microtime(true)-$time; 
echo "Last Value: $lastValue\n"; 
echo "array_filter took $time seconds\n"; 
unset($array_2); 
$time=microtime(true); 

for($run=0; $run<1000; $run++) 
{ 
$array=$save; 
$array = array_flip($array); 
unset($array['']); 
$lastValue = array_pop(array_flip($array)); 
} 

$time=microtime(true)-$time; 
echo "Last Value: $lastValue\n"; 
echo "array_flip took $time seconds\n"; 
unset($array_2); 
$time=microtime(true); 

for($run=0; $run<1000; $run++) 
{ 
$array=$save; 
$lastValue = array_pop($array); 
while($lastValue==='') 
{ 
$lastValue = array_pop($array); 
} 
} 

$time=microtime(true)-$time; 
echo "Last Value: $lastValue\n"; 
echo "array_pop took $time seconds\n"; 

获奖者是:

function array_last_noempty($array) 
{ 
$lastValue = array_pop($array); 
while($lastValue==='') 
{ 
$lastValue = array_pop($array); 
} 
return $lastValue; 
} 
+0

某处在幕后,它仍在迭代每个值......我希望看到一个公平的基准,以证明这真的是更快,即使是调用两个半的函数而不是一个函数的开销。尽管如此,我承认这种可能性。 :) – deceze 2011-12-27 06:59:46

+0

一秒钟,只是做一些测试。你可能是对的。 – Alasdair 2011-12-27 07:09:38

+1

有趣和酷..'array_flip'方法花费更少的时间..优秀的工作@Alasdair – Rafee 2011-12-27 10:36:41

您可以用功能这种操作还有:

<?php 
    function getLastElement($data=array()) 
    { 
     for($i=0; $i<count($data); $i++) 
     { 
      if($i==count($data)-1) 
      { 
       $end = $data[$i]; 
      } 
     } 
     return $end; 
    } 
?>