2009-08-10 116 views
-3

例如:现有的数据从数据库字段中检索:A,B,C,d,E 所以现在php implode爆炸可以做到这一点?

$data= "a,b,c,d,e"; 

例如:要添加新数据---毫升,保存到分贝GG 最终值将be

$finaldatatobeupdatedintodb= "a,b,c,d,e,cc,gg"; 

检索出并添加更少的值。

然后将其追回到逗号列表中。

如何纯粹使用implode并爆炸,而无需将其放入数组以重建/重新添加具有新值的东西?

+1

你可以对这个问题进行重新说明,以便它更连贯一些,更容易理解? – 2009-08-10 20:49:33

回答

2
$finaldatatobeupdatedintodb = $data . ',cc,gg'; 

这就是你需要的吗?确切地理解你的问题所要求的是很难的。

4

如果你真的想用explodeimplode,你可以做这样的事情:

首先,爆炸你的字符串:

$data= "a,b,c,d,e"; 
$list = explode(',', $data); 
var_dump($list); 

,这将给你:

array 
    0 => string 'a' (length=1) 
    1 => string 'b' (length=1) 
    2 => string 'c' (length=1) 
    3 => string 'd' (length=1) 
    4 => string 'e' (length=1) 

然后,添加新元素:

$to_add = array('cc', 'gg'); 
$new_list = array_merge($list, $to_add); 
var_dump($new_list); 

$new_list现在是:

array 
    0 => string 'a' (length=1) 
    1 => string 'b' (length=1) 
    2 => string 'c' (length=1) 
    3 => string 'd' (length=1) 
    4 => string 'e' (length=1) 
    5 => string 'cc' (length=2) 
    6 => string 'gg' (length=2) 

最后,爆了$ new_list,用 '' 作为分隔符:

$output = implode(',', $new_list); 
var_dump($output); 

,你会得到:

string 'a,b,c,d,e,cc,gg' (length=15) 

中当然,如果你从一个数组开始,那么可以少做一件事;如果你想添加的数据不是一个数组,那么还有一个可以做的事情......


但是,正如Rob pointed out,在你提出的简单的情况下,没有必要对这样一个复杂的一段代码:串并置将是绰绰有余;-)

优势与阵列/爆炸/破灭依据的解决办法是,你可以爆成一个字符串(比方说,例如,你可以对它进行排序)前的最后阵列上工作

0
<? 

function addvalues($data, $value) { 

    $array = Array(); 
    $array = explode(",", $data); 

    // if value are an array, merge it, or just add as element 
    if(is_array($value)) 
    $array = array_merge($array, $value); 
    else 
    $array[] = $value; 

    return implode(",", $array); 
} 

// original string 
$data = "a,b,c,d,e"; 

echo "Old data = ".$data."<br>"; 

// see the function, it will work with both arrays and variables 
$data = addvalues($data, Array("cc")); 
$data = addvalues($data, "gg"); 

echo "New data = ".$data."<br>"; 

?> 
1

罗布的答案相似,但可能是一个更稳健:

$final = $data . (strlen($data) ? "," : "") . "cc,gg"; 

,或者,如果你的额外值来作为数组:

$newValues = array("cc", "gg"); 
$final = $data . (strlen($data) ? "," : "") . implode(",", $newValues); 
0

你能给为什么你需要存储在数据库中逗号分隔值更多的细节?通常情况下,您可以为不同的离散值使用单独的字段。如果您拥有固定数量的值,则可以使用SET字段类型。

通常最好的解决方案是使用单独的表格。维基百科的年龄在Database normalization可能会有所帮助。