php 将字符串中的项分隔到两个数组中

23c0lvtd  于 2023-04-19  发布在  PHP
关注(0)|答案(2)|浏览(100)

如何在PHP中将这个字符串拆分成两个数组?字符串中可能有很多项。

$str = "20x9999,24x65,40x5";

我需要从这个字符串中得到两个数组:

$array1 = array(20,24,40);
$array2 = array(9999,65,5);

我尝试了很多preg_split,slice,regex的实现。我不能完成它...我需要帮助!

raogr8fs

raogr8fs1#

你可以用逗号explode字符串,然后用x分解每个值,将结果值插入两个数组:

$str = "20x9999,24x65,40x5";
$array1 = array();
$array2 = array();
foreach (explode(',', $str) as $xy) {
    list($x, $y) = explode('x', $xy);
    $array1[] = $x;
    $array2[] = $y;
}

或者,您可以使用preg_match_all,匹配x两侧的数字:

preg_match_all('/(\d+)x(\d+)/', $str, $matches);
$array1 = $matches[1];
$array2 = $matches[2];

在这两种情况下,输出为:

Array
(
    [0] => 20
    [1] => 24
    [2] => 40
)
Array
(
    [0] => 9999
    [1] => 65
    [2] => 5
)

Demo on 3v4l.org
请注意,从PHP7.1开始,您可以使用数组解构而不是list,因此您可以只写

[$x, $y] = explode('x', $xy);

而不是

list($x, $y) = explode('x', $xy);

Demo on 3v4l.org

ddrv8njm

ddrv8njm2#

我想用preg_split,我们可以这样做:

$str = '20x9999,24x65,40x5';

$array1 = $array2 = array();

foreach (preg_split("/,/", $str, -1, PREG_SPLIT_NO_EMPTY) as $key => $value) {
    $val = preg_split("/x/", $value, -1, PREG_SPLIT_NO_EMPTY);
    array_push($array1, $val[0]);
    array_push($array2, $val[1]);
}

var_dump($array1);
var_dump($array2);

输出

array(3) {
  [0]=>
  string(2) "20"
  [1]=>
  string(2) "24"
  [2]=>
  string(2) "40"
}
array(3) {
  [0]=>
  string(4) "9999"
  [1]=>
  string(2) "65"
  [2]=>
  string(1) "5"
}

相关问题