在PHP implode中合并带有字符串变量的数组

时间:2018-10-24 12:49:56

标签: php arrays variables concat implode

implode(',', $a);

我想像这样将$q变量附加在$a前面

implode(',', $q.$a); 

但这不起作用。如何将2个变量放入内爆函数中?

$a是一个包含诸如“ com,org”之类的域名的数组,而$q是您在域名出现之前输入的文本(字符串)。

我收到以下错误:

  

无效的参数在行中传递。

整个代码:

$a = ['nl','net','com','co'];
$q = $_REQUEST["q"];

$domain = explode(".", $q);
$ext = @$domain[1] ?: ' ';


if (empty($ext)) {
    echo implode(',',$a);
} else if (in_array($ext, $a)) {
    echo $q;
} else {
    $r = [];
    foreach ($a as $x) {
        if (strstr($x, $ext)) {
            $r[] = $x;
        }
    }
    echo (count($r)) ? implode(',',$r) : implode(',',$a);
}

4 个答案:

答案 0 :(得分:1)

如果$a是一个数组,而$q是前缀字符串,则可以通过两个步骤实现:

添加前缀:

$a = array("com", "co");
$q = "robot.";
foreach ($a as &$value)
    $value = $q.$value;

第二,使用爆破:

echo implode(',',$a);

输出为:

robot.com,robot.co

已编辑

我认为这将更适合您:

$a = array("com", "co", "org");
$q = "robot.c";
$arr =  explode(".", $q);

$output = array();
foreach ($a as &$value) {
    if (substr($value, 0, strlen($arr[1])) === $arr[1])
        $output[]= $arr[0] . "." . $value;
}
echo implode(',',$output);

在此代码中,您将获取域名前缀并搜索可能适合该前缀的所有域名。

请注意,在此示例中,我们拥有域org,但是由于您的前缀为c

,他没有显示

答案 1 :(得分:0)

您需要在$q函数之前添加implode。您可以使用$q函数将$a添加到array_map数组中。

$array = array('com', 'org', 'net');
$q = 'test';
$array = array_map(function($value) { 
                    $q= "test"; // you $q value goes here.
                    return $q.".".$value; 
         }, $array);

echo implode(',',$array);

答案 2 :(得分:0)

尝试一下

$a = array("com", "co");
$q = "robot.c";
$temp = explode(".",$q);
foreach ($a as $value)
    echo $value = $temp[0].".".$value;

答案 3 :(得分:0)

假设您的业务逻辑保证$a永远不会为空,那么这是最直接,最有效,最简洁的技术...

代码:(Demo

$a = ['nl', 'net', 'com', 'co'];
$q = 'example';

echo "$q." . implode(",$q.", $a);

输出:

example.nl,example.net,example.com,example.co

看看不需要循环或调用任何其他函数吗?

这种扩展定界胶水的基本技术可以在其他用法中看到,例如:

echo '<tr><td>' . implode('</td><td>', $array) . '</td></tr>';

这个想法是,在第一个值之前先添加所需的内容,然后将粘连声明为每个值之后和下一个值之前需要出现的字符。