PHP-preg_replace如何添加一个额外的“]”和一个额外的“ [”

时间:2019-07-30 23:49:49

标签: php

是否可以使用preg_replace或其他php代码来做到这一点?

我有一个看起来像这样的字符串:

[[10],[11],[2],[3],[5],[1],[10],[15],[20],[21],[14],[16],[17],[6],[9],[4]]

我想这样显示:

[[10,11],[2,3],[5,1],[10,15],[20,21],[14,16],[17,6],[9,4]]

所以我用str_replace替换了“],[”部分

$xy1 = str_replace('],[', ',', $xy1);

现在看起来像这样:

[[10,11,2,3,5,1,10,15,20,21,14,16,17,6,9,4]]

但是我需要在第二个数字后添加一个额外的“]”,并在第二个逗号前添加一个额外的[:

[[10,11],[2,3],[5,1]

2 个答案:

答案 0 :(得分:1)

几种可能性:

该字符串是有效的JSON(无论是否打算使用该字符串),因此您可以对其进行解码,对所得数组进行分块并重新编码。

$result1 = json_encode(array_chunk(array_column(json_decode($string),0),2));

如果您是通过json_encode在先前的代码中生成字符串,那时候最好只使用array_chunk,但是如果它来自其他来源,您显然不能做那个。

对于此特定字符串,将数字与正则表达式配对可能不那么麻烦。

$result2 = preg_replace('/(\d+)\D+(\d+)/', '$1,$2', $string);

或两种方式的组合,提取所有数字,然后分块编码。

preg_match_all('/\d+/', $string, $numbers);
$result3 = json_encode(array_chunk($numbers[0], 2), JSON_NUMERIC_CHECK);

答案 1 :(得分:0)

这可能会有所帮助,提取嵌套的数组值,然后按对将它们分组。

$newArray = array_chunk( array_column( $array, 0 ), 2 );