函数返回原始值而不进行修改

时间:2016-01-12 06:54:47

标签: php

我的函数trim_text在使用dash_text等其他函数时不会给出修剪过的单词。但是直接向trim_text提供一个字符串就行了!

function trim_text($data, $limit){
    $words  = str_word_count($data, 1);
    $trim = (count($words) >= $limit)? array_slice($words, 0, $limit) : $words; 
    return implode(" ", $trim);
}

function dash_text($data){
    $data = str_replace(' ','-',$data);
    return $data;
}


$title = 'this is a test.';

$slug = trim_text(dash_text($title), 2);
var_dump($slug); //this will not return the trimmed words but instead return `this-is-a-test.`
//should return `this-is`

$slug = trim_text('this is a test', 2);
var_dump($slug); //but this would!

此外,如果我的方法不是最佳做法(我不是在谈论安全性),请告诉我将$title转换为降低,修剪和虚线的字符串的建议。

3 个答案:

答案 0 :(得分:2)

您应该致电$slug = dash_text(trim_text($title, 2));

而不是trim_text(dash_text($title), 2);

<强>解释

在您的情况下,方法dash_text($title)将首先执行,并返回this-is-a-test.。方法trim_text在此字符串上执行。因此,它将返回this-is-a-test.,因为输入中没有单词分隔符。

另一方面,dash_text(trim_text($title, 2));将首先执行trim_text并返回this is。然后dash_text将在this is上执行,并返回this-is

答案 1 :(得分:2)

因为这行代码:

$data = str_replace(' ','-',$data);

您正在用破折号替换空间。

以空格连接的单词是不同的。

e.g。在字符串

this is a test.thisisa...是字

但是,与hypen(破折号)连接并没有什么不同。

e.g。 this-is-a-test

this-is-a-test是唯一的词。

所以,

更改

trim_text(dash_text($title), 2);

要:

$slug = dash_text(trim_text($title, 2));

答案 2 :(得分:1)

问题在于str_word_count函数不计算由&#34; - &#34;分隔的单词。作为多个单词。请参阅PHP文档:

http://lv.php.net/str_word_count

  

出于此功能的目的,&#39; word&#39;被定义为包含字母字符的语言环境相关字符串,它也可以包含但不能以&#34;&#39;&#34;&#34;和&#34; - &#34;字符。

由于您将所有空格转换为&#34; - &#34;然后通过文本&#39;这是一个测试&#39;对于trim_text函数,总是从str_word_count获得1的返回值。

请注意所调用的功能顺序。