在php中从字符之间的字符串中分离值
我在php中有一个字符串(“在php中从字符之间的字符串中分离值,php,string,Php,String,我在php中有一个字符串(“$big_string”),它是一小段字符串(“$string”)的组合,例如: $string1="-val1(sec1)-"; $string2="-val2(sec2)-"; $string3="-val3(sec3)-"; $big_string=$string1.$string2.$string3; 如何将$big_字符串中的值分离到类似 val1..等值介于'-'&'(' 而sec1…等值介于'
$big_string
”),它是一小段字符串(“$string
”)的组合,例如:
$string1="-val1(sec1)-";
$string2="-val2(sec2)-";
$string3="-val3(sec3)-";
$big_string=$string1.$string2.$string3;
如何将$big_字符串中的值分离到类似
val1..
等值介于'-'
&'('
而sec1…
等值介于'('
&')-'
编辑:我收到$big\u字符串作为输入,上面的代码用于引用$big\u字符串的构造方式。您可以使用:
如果您使用的是PHP<7.4,则带有$result
的行可以更改为:
$result = array_map(static function ($match) {
return array_slice($match, 1);
}, $matches);
您可以使用:
如果您使用的是PHP<7.4,则带有$result
的行可以更改为:
$result = array_map(static function ($match) {
return array_slice($match, 1);
}, $matches);
我喜欢使用基本的PHP函数使代码保持简单。类似于:
$big_string = '-val1(sec1)--val2(sec2)--val3(sec3)-';
$val_sec_array = explode('--', trim($big_string, '-'));
foreach ($val_sec_array as $val_sec) {
$array[] = [strstr($val_sec, '(', TRUE),
trim(strstr($val_sec, '('), '()')];
}
print_r($array);
第一行使用trim()
然后,foreach
循环获取该数组,并使用strstr
首先从字符串中获取'('
),然后获取'('
)之后的节。'('
和')
将从后一节中删除。这两个值然后形成一个数组[…,…]
和存储在主阵列中
这很有趣,这样说会让它听起来比实际更复杂。只需看看手册中的工作原理:
我喜欢使用基本的PHP函数使代码保持简单。类似于:
$big_string = '-val1(sec1)--val2(sec2)--val3(sec3)-';
$val_sec_array = explode('--', trim($big_string, '-'));
foreach ($val_sec_array as $val_sec) {
$array[] = [strstr($val_sec, '(', TRUE),
trim(strstr($val_sec, '('), '()')];
}
print_r($array);
第一行使用trim()
然后,foreach
循环获取该数组,并使用strstr
首先从字符串中获取'('
),然后获取'('
)之后的节。'('
和')
将从后一节中删除。这两个值然后形成一个数组[…,…]
和存储在主阵列中
这很有趣,这样说会让它听起来比实际更复杂。只需看看手册中的工作原理:
生成这些字符串($string1
、$string2
和$string3
)或者你就这样得到它,你不能更改它?@DefinitelynotRafal先生我收到的字符串是$big\u string,我添加了上面的示例来演示$big\u string是如何构造的。这不是我的问题。我的问题是,如果你有任何影响来更改你收到的字符串,例如,你能将其更改为。.val1(sec1)。”
,这是可能的,是还是否?@DefinitelynotRafal是的,我可以要求用户(由其他代码从函数接收的字符串)以.var1(sec1)的格式给出字符串。
而不是-var1(sec1)-
一种更安全的方法是使用,易于编码和安全解码。您生成这些字符串($string1
、$string2
和$string3
)或者你就这样得到它,你不能更改它?@DefinitelynotRafal先生我收到的字符串是$big\u string,我添加了上面的示例来演示$big\u string是如何构造的。这不是我的问题。我的问题是,如果你有任何影响来更改你收到的字符串,例如,你能将其更改为。.val1(sec1)。”
,这是可能的,是还是否?@DefinitelynotRafal是我可以要求用户(由其他代码从函数接收的字符串)以.var1(sec1)格式给出字符串。
而不是-var1(sec1)-
一种更安全的方法是使用,易于编码和安全解码。谢谢你,先生,它工作起来很有魅力,你能添加评论让我了解它的功能吗?我会尝试,但大部分都可以在中找到。谢谢你,先生,它工作起来很有魅力,你能添加评论让我了解它的功能吗g、 我会尝试,但大部分你可以在中找到。旁注:假设$string3=“-val3()-”;
是这样,那么它将跳过这对'val3'=>”
。如果这是有意的或无意的,问题本身并不清楚。如果$string2=“-val2()-”;
(使用$string3=“-val3(sec3)-”;
)将是这种情况。在我看来仍然值得注意。对,这取决于括号之间的内容是否可以为空。在这种情况下,可能需要将+
更改为*
。旁注:假设$string3=“-val3()-”;
将是这种情况,然后它将跳过该对'val3'=>'
。如果这是有意的还是无意的,问题本身并不清楚。此外,如果例如$string2=“-val2()-”;
(使用$string3=“-val3(sec3)-”;
)是的。在我看来仍然值得注意。对,这取决于括号之间的内容是否可以为空。在这种情况下,可能需要将+
更改为*
。