【问题标题】:php implode explode can do it? [closed]php implode explode可以做到吗? [关闭]
【发布时间】:2009-08-10 17:18:15
【问题描述】:

例如:从 db 字段中检索现有数据:a、b、c、d、e 所以现在

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

eg: 要添加的新数据--- cc, gg 保存到 db 中的最终值将是

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

检索并添加更多值。

然后将其附加回逗号列表中。

如何纯粹使用内爆和爆炸来做到这一点,而无需将其放入数组中以进行 for 循环以重构/重新添加添加了新值的事物?

【问题讨论】:

  • 你能改写这个问题,让它更连贯,更容易理解吗?

标签: php explode implode


【解决方案1】:

如果你真的想使用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,在您介绍的简单情况下,不需要这么复杂的代码:字符串连接就足够了;-)

基于数组/爆炸/内爆的解决方案的优点是您可以在将最终数组内爆成字符串之前对其进行处理(例如,您可以对其进行排序)

【讨论】:

    【解决方案2】:
    $finaldatatobeupdatedintodb = $data . ',cc,gg';
    

    这是你需要的吗?很难准确理解您的问题在问什么。

    【讨论】:

      【解决方案3】:

      类似于 Rob 的回答,但可能更可靠:

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

      或者,如果您的额外值以数组形式出现:

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

      【讨论】:

        【解决方案4】:
        <?
        
        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>";
        
        ?>
        

        【讨论】:

          【解决方案5】:

          您能否详细说明为什么需要在数据库中存储逗号分隔值?通常,您会为不同的离散值使用单独的字段。如果您有固定数量的值,则可以改用 SET 字段类型。

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

          【讨论】:

            猜你喜欢
            • 2013-05-22
            • 2011-11-27
            • 1970-01-01
            • 2015-05-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多