2012-11-11 184 views
0

我剛剛顯示了從數組中刪除數字超過2個小數位的數字的方法[here]。 的事情是,當我嘗試使用echo代替的var_dump這樣格式化輸出:刪除空數組元素

$line = 1; 
for($i = 1; $i < count($value1); $i++){ 
    echo "$line | ".$value1[$i][0]." | ".$value1[$i][1]." | ".$value1[$i][2]." | ".$value1[$i][3]." | ".$value1[$i][4].'<br>'; 
    $line = $line + 1; 
} 

我得到很多「通知:未定義抵消:」所有的地方。有沒有辦法重置數組中的行?

我需要使用「echo」格式化它的原因是,我可以直接複製輸出並將其粘貼到文檔中,而無需從「var_dump」中刪除不必要的字符。我做錯了嗎?提前

感謝名單...

Thanx提前。

+0

在數組上循環的正確方法取決於特定數組的內容和結構。那麼......你的陣列裏有什麼?使用var_dump()併爲我們很好地格式化輸出。 – goat

回答

2

使用implode而不是unhandy concatenation怎麼樣?

<?php 
foreach ($value1 as $counter => $line){ 
    echo ($counter + 1) . " | ". implode(" | ", $line) . '<br>'; 
} 

這樣就確保只有現有值被連接。如果您仍想從數組中移除元素,則可以考慮檢查它們是否爲空,然後使用unset

1

我不知道該怎麼排列的樣子,但你在肯定的代碼有一個錯誤是:

for($i = 1; $i < count($value1); $i++) 

在PHP中的數組索引0開始,你需要糾正這樣的代碼:

for($i = 0; $i < count($value1); $i++) 

或使用foreach這是一個更容易。

1

解決了它。 後:

function decimalFilter($v) { 
     foreach ($v as $x) { 
      if (strlen(substr(strrchr($x, "."), 1)) > 2) 
       return false; 
     } 
     return true; 
    } 
$value = array_filter($value, "decimalFilter"); 

然後,添加:

sort($value); 

後跟:

for($i = 1; $i < count($value); $i++){ 
    echo $value[$i][0]." | ".$value[$i][1]." | ".$value[$i][2]." | ".$value[$i][3]." | ".$value[$i][4].'<br>'; 
} 

輸出過程中的缺少的元素消失。事情是我不知道,如果這是一個實用的方法。

1

你可以使用一些方法來刪除或忽略該數組元素,而PHP投擲聲明:

$line = 1; 
for($i = 1; $i < count($value1); $i++){ 
if(isset($value[$i][0]) === TRUE && isset($value[$i][1]) === TRUE && isset($value[$i][2]) === TRUE && isset($value[$i][3]) === TRUE && isset($value[$i][4]) === TRUE) 
{ 
    echo "$line | ".$value1[$i][0]." | ".$value1[$i][1]." | ".$value1[$i][2]." | ".$value1[$i][3]." | ".$value1[$i][4].'<br>'; 
} 

    $line = $line + 1; 
} 

,或者你可以使用count($值$ i] [0])> 0,以保證該數組包含一個值。