Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 如何使用codeigniter从数据库中检索hass或逗号分隔值?_Php_Mysql_Codeigniter_Phpmyadmin - Fatal编程技术网

Php 如何使用codeigniter从数据库中检索hass或逗号分隔值?

Php 如何使用codeigniter从数据库中检索hass或逗号分隔值?,php,mysql,codeigniter,phpmyadmin,Php,Mysql,Codeigniter,Phpmyadmin,我参与了一个CodeIgniter项目。在这个项目中,另一个开发人员在数据库中插入cat#id,包括#像#1#一样分开。插入两个cat_id时,值存储在数据库中,如#1##2# 现在我想检索cat_id并将其连接到另一个表 好的,我在第一次尝试中犯了一个错误(查找bellow),希望它能起作用: $text = "#1##2##10000"; $ids = array_filter(explode('#', $text)); // output array(3) { [1]=> stri

我参与了一个CodeIgniter项目。在这个项目中,另一个开发人员在数据库中插入cat#id,包括#像#1#一样分开。插入两个cat_id时,值存储在数据库中,如#1##2#


现在我想检索cat_id并将其连接到另一个表

好的,我在第一次尝试中犯了一个错误(查找bellow),希望它能起作用:

$text = "#1##2##10000";
$ids = array_filter(explode('#', $text));

// output
array(3) { [1]=> string(1) "1" [3]=> string(1) "2" [5]=> string(5) "10000" }
如果要将数组键重新设置为从0开始,则奖励:

$ids = array_values(array_filter(explode('#', $text)));

// output
array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(5) "10000" }
旧的错误答案:

$text = "#1##2#";

$ids = [];
for ($i=0; $i < strlen($text); $i++) { 
    if ($text[$i] != '#') {
        $ids[] = $text[$i];
    }
}

var_dump($ids);
// produced result
array(2) { [0]=> string(1) "1" [1]=> string(1) "2" }
$text=“#1##2#”;
$ids=[];
对于($i=0;$istring(1)“1”[1]=>string(1)“2”}

我想检索1和2表单#1##2#。我不改变数据库 或插入代码

我强烈建议您将PHP代码和MySQL表更改为支持规范化
因为从
#1###2#
获取(“解析”)cat_id号所需的查询是一场噩梦,不会很好地执行
查询看起来或多或少是这样的,没有与其他表的额外连接

SELECT 
  DISTINCT
   REVERSE(
      REVERSE(
     SUBSTRING_INDEX(SUBSTRING_INDEX(<table>.<column>, '##', rows.row), '##', -1) 
   ) >> 1 ) AS cat_id
FROM (
  SELECT 
   @row := @row + 1 AS ROW
  FROM (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) row1
  CROSS JOIN (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) row2  
  CROSS JOIN (
    SELECT @row := 0 
  ) init_user_params
)
 ROWS
CROSS JOIN 
 <table>
你可以试试这个

$str = "#1##2#";
preg_match_all('|\d+|',$str,$matches);
print_r($matches);

工作开始了。

你明白我的问题了吗?我想从表1和表2中检索。我不更改数据库或插入代码“我想检索1和2表单#1###2#。我不更改数据库或插入代码”将代码和数据库转换为支持规范化的速度比您试图解决这一问题快得多,相信我,您不会使用额外的代码从#1###2#中解析出cat#id,嗨,它返回blankHi,你确定$text变量不是空的还是别的什么吗,我刚刚在本地测试了代码,它工作得很好。我已将我的输出添加到答案中。“它就像一个符咒。”使用
$text=“#1#2#10000”测试它
..@RaymondNijland我刚才做了,这是输出:数组(7){[0]=>string(1)“1”[1]=>string(1)“2”[2]=>string(1)“1”[3]=>string(1)“0”[4]=>string(1)“0”[6]=>string(1)“0”},这对我来说似乎没问题。
10000
是该字符串中的一个数字吗?移动应用程序正在使用数据库运行。所以我不能改变这个数据库。是的,这对我来说很难。关于我的下一个问题,你是对的。“一个移动应用程序正在使用数据库运行”@MinhazurRahaman我听说你没有内置一个应用程序版本检查器来阻止并强迫用户下载移动应用程序更新后,我想你是对的?”是的,我很难回答。关于我的下一个问题,你是对的”如果我的SQL代码有效,那么您应该只拥有cat_id,您仍然需要进行连接。。Codeignitor支持
$this->db->query(“您在这里的查询”)
要直接访问查询,请记住,当使用用户输入时,其中的SQL可能会有SQL注入,因此您需要使用
$this->db->escape(…)
来保护这些。。这是最简单的方法。一般的方法是初始化
$matches
数组
$matches=array()$匹配项=[];(PHP5-7)
在使用
preg_match_all(…)
之前,首先要避免在代码中出现关于缺少
$matches
变量的警告和可能的流控制错误。请向我展示PHP中的错误报告级别,它将对匹配的未定义变量发出警告/通知<代码>通过preg_match_all的文档进行。据我所知,
$matches
在那里得到了定义。“据我所知,$matches在那里得到了定义。”现在我看起来确实更好了,
&$matches
是一个参考,因此它不会生成丢失的警告。。好的,我将给您一个其他原因(不太重要),然后在
$matches
变量上忽略可能的IDE代码自动完成支持。。另外,一般意义是总是初始化变量,当变量通过引用自动设置时,如本例中所示,那么在我的观点中遵循良好的编程习惯。好的@RaymondNijland I将对此进行记录。我总是坚持基本原则,
E\u ALL
在我编写代码时总是处于活动状态。谢谢。那$matches@RahulMeshram呢
array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(5) "10000"
}
$str = "#1##2#";
preg_match_all('|\d+|',$str,$matches);
print_r($matches);