提问者:小点点

将变量串在一起,str_replace。 更整洁的方法?


我有一堆变量,我想把它们串起来。 它们都需要通过删除空格和逗号,并转换为破折号来进行整理(我正在构建一个URL)。

我对PHP有一个非常基本的了解,但是我觉得我下面的代码可以更整洁,更高效。 你能给我指一些资源或者提一些建议吗?

以下是我所得到的:

$propNum = $prop->Address->Number;
$propStreet = $prop->Address->Street;
$propTown = $prop->Address->Town;
$propPost = $prop->Address->Postcode;
$propFullAdd = array($propNum, $propStreet, $propTown, $propPost);
$propFullAddImp = implode(" ",$propFullAdd);
$propFullAddTidy = str_replace(str_split(' ,'),'-', strtolower($propFullAddImp));

echo $propFullAddTidy;

共1个答案

匿名用户

从现有代码的输出来看,您可能需要类似以下内容的输出:

12345-example-street-address-example-town-example-postcode

在这种情况下,您可以使用以下解决方案:

//loop through all the values of $prop->Address
foreach($prop->Address as $value) {

    //for each value, replace command + space with dash
    //store altered value in new array `$final_prop`
    $final_prop[] = str_replace([' ', ','], '-', $value);

    /*
        Removing `str_split(' ,')` and subbing an array makes the loop "cheaper" to do,
        Because the loop doesn't have to call the `str_split()` function on every iteration.
    */

}

//implode `$final_prop` array to dash separated string
//also lowercase entire string at once (cheaper than doing it in the loop)
$final_prop = strtolower(implode('-', $final_prop));

echo $final_prop;

如果删除注释,这个解决方案只有4行(而不是7行),并且是完全动态的。 这意味着如果向$prop->address添加更多值,则不必更改此代码中的任何内容。

我觉得这通常是通过使用http_build_query()来处理的,它将数组转换为正确的URL编码的查询字符串。 这意味着数组中的每个值都将在URL查询中作为自己的变量传递。

首先,$propFullAdd不是必需的(事实上,它可能是有害的),$prop->address已经包含了完全相同的数组。 像这样重新创建数组完全消除了区分哪个值到哪个键的能力,这可能会有问题。

这意味着您可以通过以下方式来简化整个代码:

echo http_build_query($prop->Address);

输出如下所示:

Number=12345&Street=Example+Street+Address&Town=Example+Town&Postcode=Example+Postcode

相关问题