Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从数据库中存储的逗号分隔字符串中删除数字_Php_String_Str Replace_Replace - Fatal编程技术网

PHP从数据库中存储的逗号分隔字符串中删除数字

PHP从数据库中存储的逗号分隔字符串中删除数字,php,string,str-replace,replace,Php,String,Str Replace,Replace,我正在用5,55,15,17,2,35这样的字符串将数字存储在数据库中 我想删除字符串中的数字5,保持逗号分隔设置不变 使用str_replace()的问题是所有5个都将被删除。如果我使用 StryRead('5,',$string)这很好,但是逗号不会在5之后,如果它在字符串的中间或结尾。同样的stru_替换也会移除15和55的一部分 我遗漏了什么吗?首先用逗号分割字符串,以便您可以直接处理数字。从数组中删除5,然后将数组重新组合为逗号分隔的字符串 下面是一个例子: <?php

我正在用
5,55,15,17,2,35这样的字符串将数字存储在数据库中

我想删除字符串中的数字5,保持逗号分隔设置不变

使用
str_replace()
的问题是所有5个都将被删除。如果我使用<代码> StryRead('5,',$string)这很好,但是逗号不会在5之后,如果它在字符串的中间或结尾。同样的stru_替换也会移除15和55的一部分


我遗漏了什么吗?

首先用逗号分割字符串,以便您可以直接处理数字。从数组中删除5,然后将数组重新组合为逗号分隔的字符串

下面是一个例子:

<?php
    $input = '5,55,15,17,2,35';
    echo "Input: $input<br />";

    // Split the string by "exploding" the string on the delimiter character
    $nums = explode(',', $input);

    // Remove items by comparing to an array containing unwanted elements
    $nums = array_diff($nums, array(5));

    // Combine the array back into a comma-delimited string
    $output = implode(',', $nums);

    echo "Output: $output<br />";

    // Outputs:
    // Input: 5,55,15,17,2,35
    // Output: 55,15,17,2,35

?>

首先用逗号拆分字符串,以便直接处理数字。从数组中删除5,然后将数组重新组合为逗号分隔的字符串

下面是一个例子:

<?php
    $input = '5,55,15,17,2,35';
    echo "Input: $input<br />";

    // Split the string by "exploding" the string on the delimiter character
    $nums = explode(',', $input);

    // Remove items by comparing to an array containing unwanted elements
    $nums = array_diff($nums, array(5));

    // Combine the array back into a comma-delimited string
    $output = implode(',', $nums);

    echo "Output: $output<br />";

    // Outputs:
    // Input: 5,55,15,17,2,35
    // Output: 55,15,17,2,35

?>

您应该:

  • 获取字符串
  • 然后将这些值“分解”为一个数组
  • 并重新创建不包含要删除的数字的字符串
  • 你应该:

  • 获取字符串
  • 然后将这些值“分解”为一个数组
  • 并重新创建不包含要删除的数字的字符串
  • 首先,您可能不应该在单个数据库列中存储逗号分隔的值列表。它看起来像一对多的关联,应该用一个单独的表来建模

    str_replace([$num.",",",".$num],"",$input);
    

    首先,您可能不应该在单个数据库列中存储逗号分隔的值列表。它看起来像一对多的关联,应该用一个单独的表来建模。

    U可以尝试以下方法:

    str_replace([$num.",",",".$num],"",$input);
    
    // Convert string into array of numbers
    $arrOfNumbers = explode(',', $string);
    
    // Find id of number for del
    $numberForDelId = array_search($numberForDel, $arrOfNumbers);
    
    //Delete number
    unset($arrOfNumbers[$numberForDelId]);
    
    // Convert back to string
    $resultString = implode(',' $arrOfNumbers)
    

    你可以试试这样的东西:

    // Convert string into array of numbers
    $arrOfNumbers = explode(',', $string);
    
    // Find id of number for del
    $numberForDelId = array_search($numberForDel, $arrOfNumbers);
    
    //Delete number
    unset($arrOfNumbers[$numberForDelId]);
    
    // Convert back to string
    $resultString = implode(',' $arrOfNumbers)
    


    正是由于这个原因,在一大堆其他数字中存储那样的数字是非常可怕的做法。@Ratbum:逗号分隔列表可能不是最理想的数字存储格式,但在某些情况下,您有未知(但很小)数量的简单整数;添加一个单独的表可能比简单地解析单列列表要复杂得多。@JYelton我最近不得不处理类似这样的设置(尽管有点糟糕)。这只会让事情变得更尴尬。这里似乎也一样。它似乎工作得很好,虽然是的,感觉有点不舒服。我正在考虑更改模型该网站纯粹是使用jquery/ajax调用PHP/MySQL来构建的,因此在众多其他网站中存储这样的数字是非常可怕的做法。@Ratbum:逗号分隔的列表可能不是最理想的数字存储格式,但在有些情况下,您的数字存储格式未知(但很小)简单整数的数量;添加一个单独的表可能比简单地解析单列列表要复杂得多。@JYelton我最近不得不处理类似这样的设置(尽管有点糟糕)。这只会让事情变得更尴尬。这里似乎也一样。它似乎工作得很好,虽然是的,感觉有点不舒服。我正在考虑更改模型该网站纯粹是使用jquery/ajax调用PHP/MySQL构建的。该数据库包含具有里程碑和任务的项目。每个项目都有一个“里程碑顺序”列,该列有逗号分隔的列表,每个里程碑都有一个“任务顺序”列,该列有属于该里程碑的任务的逗号分隔列表。对,这不是你建模的方式。您可以创建一个
    项目\里程碑\订单
    表和一个
    里程碑\任务\订单
    表,其中包含
    (项目\ id,里程碑\ id,订单)
    (里程碑\ id,任务\ id,订单)
    。每个关联都是一行。要删除所有5s,您可以
    从项目里程碑\u订单中删除,其中订单=5
    。如果您曾经在一列中存储多个值,那么您有一个非规范化的表,应该重新考虑您的模式。该模型听起来很混乱,因为当我更新顺序时,我必须为每个里程碑/任务更改每一行,这是糟糕的数据库设计。应该有一个project\u milestones表,列为project\u id、milestone\u id、order,以及一个milestone\u tasks表,列为milestone\u id、task\u id、order。这是有道理的,但是您会运行什么样的查询来更改顺序?数据库包含具有里程碑和任务的项目。每个项目都有一个“里程碑顺序”列,该列有逗号分隔的列表,每个里程碑都有一个“任务顺序”列,该列有属于该里程碑的任务的逗号分隔列表。对,这不是你建模的方式。您可以创建一个
    项目\里程碑\订单
    表和一个
    里程碑\任务\订单
    表,其中包含
    (项目\ id,里程碑\ id,订单)
    (里程碑\ id,任务\ id,订单)
    。每个关联都是一行。要删除所有5s,您可以
    从项目里程碑\u订单中删除,其中订单=5
    。如果您曾经在一列中存储多个值,那么您有一个非规范化的表,应该重新考虑您的模式。该模型听起来很混乱,因为当我更新顺序时,我必须为每个里程碑/任务更改每一行,这是糟糕的数据库设计。应该有一个project\u milestones表,其中列为project\u id、milestone\u id、order,还有一个milestone\u tasks表,其中列为milestone\u id、task\u id、order。这是有道理的,但是您会运行什么样的查询来更改顺序呢?我假设在您举一个例子之前,他们会投反对票。无论如何,所有这些都很好地工作。谢谢。我以为否决票是针对无用的答案,而不是没有实例的答案。在你举个例子之前,我假设他们否决了。无论如何,所有这些都很好地工作。谢谢。我还以为投反对票的是没有用的答案,而不是没有实例的答案。解释你的答案?解释你的答案?哎呀,看来我在时间机器上做的不够多。你的技术已经在那里了。哎呀,看来我没有