2011-12-27 61 views
1

我有一個數組名arrayname並在下面的圖像中有一些值。使用php檢索數組中的最後一個值

enter image description here

我怎樣才能在陣列arrayname即使在arrayname1[7]爲空值的最後一個值。這應該忽略空值並給出最終答案。

回答

9

篩選出空值,取最後一個值:

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

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

1

有沒有辦法找到你需要的空值,但還有另一種方法來創建另一個數組並找到最終值。

下面是一個示例實施例

<?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

0
使用

「isset()函數」,以查看是否有元件是 「空」。

使用「count()」來確定數組的長度。

2

基準:

我重做我自己的服務器上的標杆,因爲鍵盤是由它給零星結果是零星的服務器負載,它使用的是舊版本的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

0

您可以用功能這種操作還有:

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