【问题标题】:String Splitting PHP字符串拆分 PHP
【发布时间】:2020-07-16 15:06:24
【问题描述】:

我想将一个字符串分解成不同的部分,由于字符串的性质,我无法完全理解如何去做或者如果可能的话。

下面是我要分解的字符串:

"'1,2,3,4','2,4,5,6,4',NULL, NULL,NULL ,'2,3,4,5', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL"

我想要:

'1,2,3,4',
'2,4,5,6,4',
NULL,
NULL,
'2,3,4,5'

我正在考虑做这样的事情:

<?php
    
    $test = 'CALL sp_advert_search_load(\'1,3,4,5\',\'2,4,3\',NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)';
    $test1 = explode( '(',$test);
    $test1 = explode( ',',$test1[1]);
    
    foreach ($test1 as $food){
    
    echo $food."<br />";;
    }
    ?>

然后尝试以某种方式使用 ' 和起点和终点将数组重新构建为字符串。

任何人有更好的方法来解决这个问题吗?

【问题讨论】:

  • 您能解决您的问题还是只是在寻求更好的性能?
  • 您的第一个字符串和第二个字符串不同。您是要解析两者还是仅解析一个?如果有,是哪一个?如果您可以将其转换为有效的 JSON,则使用 json_decode,这可能是最好的选择。将括号括起来,将' 替换为"
  • @NitinSingh 我还没有解决问题。我开始使用的字符串是“CALL sp_advert_search_load('1,2,3', '1,2,3', NULL, '1,2,3', NULL, NULL, NULL, NULL, NULL, NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)"

标签: php arrays string


【解决方案1】:

您似乎有 2 个问题,但这无论如何都会将其分成两部分。

首先是从CALL 中提取参数部分,这会找到第一个( 并获取字符串的其余部分。然后它使用rtrim() 去除尾随的)(如果有空格,也可以使用空格)。

第二部分是将字符串拆分为每个参数。由于它现在实际上是一个 CSV,我使用 str_getcsv()' 作为外壳进行拆分,以将组保持在一起......

$test = 'CALL sp_advert_search_load(\'1,3,4,5\',\'2,4,3\',NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)';

$params = rtrim(substr($test, strpos($test, "(") + 1), " )");
print_r(str_getcsv($params, ",", "'"));

给...

Array
(
    [0] => 1,3,4,5
    [1] => 2,4,3
    [2] => NULL
    [3] =>  NULL
    [4] =>  NULL
    [5] =>  NULL
    [6] =>  NULL
    [7] =>  NULL
    [8] =>  NULL
    [9] =>  NULL
    [10] =>  NULL
    [11] =>  NULL
    [12] =>  NULL
    [13] =>  NULL
    [14] =>  NULL
    [15] =>  NULL
    [16] =>  NULL
    [17] =>  NULL
    [18] =>  NULL
    [19] =>  NULL
    [20] =>  NULL
    [21] =>  NULL
    [22] =>  NULL
    [23] =>  NULL
    [24] =>  NULL
    [25] =>  NULL
    [26] =>  NULL
    [27] =>  NULL
    [28] =>  NULL
    [29] =>  NULL
    [30] =>  NULL
)

【讨论】:

  • 谢谢,这正是我想要做的。完美运行
【解决方案2】:

因为无聊,把括号里的东西提取出来,然后eval它作为一个数组:

preg_match('/\(.*\)/', $test, $match);
eval("\$result = array$match[0];");

或者:

preg_match('/\((.*)\)/', $test, $match);
eval("\$result = [$match[1]];");

这些将为您提供实际的 NULL 值而不是字符串 "NULL",因此您只会在 var_dump 中看到它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2020-09-09
    相关资源
    最近更新 更多