【问题标题】:Array and substring php数组和子字符串 php
【发布时间】:2018-01-08 16:19:47
【问题描述】:
     //array data                          
   {
    $results[] = $result;

    $SiteID=$result["site_id"];
    $pay_sale_id=$result["pay_sale_id"];
    $pay_payment_info=$result["pay_payment_info"];
    $payNo= substring_index(substring_index('$result["pay_payment_info"]', '$USER=', -1), '~$TAGROLE', 1);

 }

pay_payment_info的内容如下

#$TAG=6F0000173~$USER=james~$TAGROLE=0

我只想提取用户信息,但出现错误:

致命错误:在行中调用未定义函数 substring_index()

【问题讨论】:

  • 你定义了函数substring_index
  • PHP中没有substring_index()函数。
  • 试试这个strpos
  • 您将 MySQL 代码与 PHP 代码混合在一起......它们是完全不同的语言。

标签: php mysql arrays substring


【解决方案1】:

考虑到用户信息总是以~$USER= 开头并以~ 结尾,我们可以使用简单的正则表达式得到结果:

preg_match('/\~\$USER=(?<user>[^~]+)/', $pay_payment_info, $match);
var_dump($match['user']);

【讨论】:

    【解决方案2】:

    正如之前的 cmets 所说 - 在核心 PHP 中没有像 substring_index 这样的功能

    此问题可能与以下Php get string between tags 重复 话题

    这是使用 strpos http://php.net/manual/pl/function.strpos.php 的工作示例

    substrhttp://php.net/manual/pl/function.substr.php

    $var = '$TAG=6F0000173~$USER=james~$TAGROLE=0';
    $m = substr($var, strpos($var, '~$USER=')+7);
    var_dump($m); //returns string(16) "james~$TAGROLE=0"
    $m = substr($m, 0, strpos($m, '~$'));
    var_dump($m); //returns string(5) "james"
    

    【讨论】:

    • 注意:如果 OP 决定将 $USER 命名为 $USERINFO$USERNAME 等(即任何 >7 个字符),上述操作将失败
    【解决方案3】:

    看来问题是您没有substring_index() 函数或方法,但您尝试调用它两次。

    我不确定您为什么使用~ 作为分隔符,但这应该没问题,尽管使用, 会减少工作量;那时,您的查询字符串的每个属性都可以直接处理。

    您要做的是使用split()php 版本,即explode(),这里是link to the manual

    你要做的是拆分 inc 字符串:

    $aUserInfo = explode('~', $result['pay_payment_info']);
    

    现在你有了一个数组。循环遍历它并让它像你想要的那样:

    $result = array();
    foreach($aUserInfo as $v){
      $aTmp = explode('=',$v);
      $result[$aTmp[0]] = $aTmp[1];
    }
    

    最后你有一个数组,其中键作为键,它们各自的值作为值,即

    $result = array( 'tag' => '6F0000173',
                     'user'=> 'James',
                     'tagrole'=> 0    );
    

    【讨论】:

    • 如果像这样在 sql 中使用子字符串 $sql="INSERT INTO payments_data(site_id, Pay_sale_id, Pay_paymnet_type, Pay_payment_info) VALUES ('00',' 0','0', substring_index(substring_index('$pay_payment_info', '$USER=', -1), '~$TAGROLE', 1) )";
    • 你一直想调用的substring_index()是什么?它不是内置功能。我不确定您是否尝试连接字符串并存储它,但这似乎是最有可能的。 ...您应该重组您的数据,但如果不可能,请将字符串吐到那里,省略其他方法,或者让我知道它应该做什么,我可能会模仿它
    • 我试图只存储一部分数据,我想提取用户名并将其存储在数据库中
    • 啊,好吧,$result["user"] 应该是那个值
    【解决方案4】:

    这个错误告诉你它为什么是一个错误:substring_index 不是一个有效的/本机 PHP 函数...不过你可以定义你自己的函数 substring_index

    但是,给定字符串:

    $TAG=6F0000173~$USER=james~$TAGROLE=0

    要获得 $USER=james 部分,您可以使用explode 如下--

    $payNo = explode("~", $result["pay_payment_info"])
    

    现在,您在$payNo[1] 中获得了$USER 信息

    如果你想更进一步只是得到$USER的值,那么你可以使用PHP原生的substr函数:

    $justUserPart = substr($payNo[1], strpos($payNo[1], "=")+1);
    echo $justUserPart;
    

    请注意:以上假设您将总是拥有格式为

    的字符串

    $TAG=...~$USER=...~$TAGROLE=...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 2018-11-28
      • 2013-04-15
      相关资源
      最近更新 更多