2014-09-24 55 views
-2
foreach($products as $val) 
    { 
     $name = $val["name"]; 

     if(strlen($name) > 5){ 
      $name = substr($name,0,5) . '..'; 
     } 

} 

我有一個字符串的列表,我想在它的末尾添加點使用PHP,但上面的代碼返回0?使用substr和concatenation的PHP省略

+1

這個代碼將取代'每次$ name' ... – Jenz 2014-09-24 07:18:17

+0

@Jenz雅,但我知道我被困.. – user3522888 2014-09-24 07:22:43

回答

3

如果您想進行更改,您需要在foreach中引用&副本。

例子:

foreach($products as &$val) { 
       //^reference 
    if(strlen($val['name']) > 5) { 
     $val['name'] = substr($val['name'], 0, 5) . ' ...'; 
    } 
} 

或者,如果你不舒服這種方式,也可以使用foreach的重點直接指向它是指數。

foreach($products as $key => $val) { 
    if(strlen($val['name']) > 5) { 
     $products[$key]['name'] = substr($val['name'], 0, 5) . ' ...'; 
       //^use $key 
    } 
} 

最後,如果你不希望在所有(只輸出回波)的任何變化,那麼這樣的:

foreach($products as $key => $val) { 
    $name = $val['name']; 
    if(strlen($name) > 5) { 
     $name = substr($name['name'], 0, 5) . '...'; 
    } 
    echo $name; // you forgot to echo 
} 
+1

對於新手這將是更使用'$ products [$ key] ['name']'而不是使用引用的例子更有用。 – zerkms 2014-09-24 07:31:49

+0

@zerkms是啊我也雖然那,這是一個很好的見識確實 – Ghost 2014-09-24 07:32:19

+0

@Ghost我使用此代碼什麼也沒有發生.. – user3522888 2014-09-24 07:33:03

1

你的問題是有點不清楚你被卡住的位置。

如果您想修改您的$products陣列,那麼Ghost爲您提供了一個解決方案。

如果你只是想要一個縮短的產品名稱數組,我會將它們存儲在一個新的數組中,因爲以後可能需要全名。

$shortNames = array(); 
foreach($products as $val) 
{ 
    $name = $val["name"]; 

    if(strlen($name) > 5){ 
     $name = substr($name,0,5) . '..'; 
    } 
    $shortNames[] = $name; 

} 

你寫

但上面的代碼返回0

如果這個代碼是一個函數裏面,也許你簡單錯過了return結果呢? 例如我的代碼,把return $shortNames;在函數結束