2014-09-24 23 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;在函数结束