我需要从给定的字符串中将数字作为数组。
示例字符串:
-T
预期产出:
-P
,则输出必须如下:array( [0] => 2, [1] => 6 )
var_export(explode("-T,",$t));
:array( [0] => 1, [1] => 3 )
我尝试了{{1}},但它没有按预期工作。 任何人都可以给我一个建议吗?
答案 0 :(得分:4)
以下匹配搜索字词-P
之前的整数
让我们简明扼要:
$matches = array();
if (preg_match_all('/([0-9]+)\-P/', $t, $matches) >= 1) {
var_dump($matches[1]);
}
依次搜索'/([0-9]+)\-P/
,'/([0-9]+)\-C/
,'/([0-9]+)\-T/
。
寻找不同搜索字词/过滤器的更动态方式:
$filter = '-T';
$pattern = sprintf('/([0-9]+)%s/', preg_quote($filter));
请参阅preg_match_all和preg_quote函数。
答案 1 :(得分:2)
试试这个:
$t = '211111111131-P,2-T,3654554-P,4-R,5-C,6-T,';
$find = "-P"; // Search element
$found = []; // Result array
$array = explode(",", $t); // Breaking up into array
foreach($array as $arr) {
if (strpos($arr, $find)) { // Checking if search element is found in $arr
$found[] = explode('-',$arr)[0]; // Extracting the number prefix e.g 1 for 1-P
}
}
输出:
Array
(
[0] => 1
[1] => 3
)
答案 2 :(得分:2)
这里已有很多好的答案,但没有人采取先将数据放入更好的结构的方法。
下面的代码将数据转换为一个关联数组,将字母映射到数字数组,以便您可以按照您想要的任何字母重复查找:
$t = '1-P,2-T,3-P,4-R,5-C,6-T,';
$a = array_filter(explode(',', $t));
$map = [];
foreach($a as $item) {
$exploded = explode('-', $item);
$number = $exploded[0];
$letter = $exploded[1];
if (!array_key_exists($letter, $map)) {
$map[$letter] = [];
}
$map[$letter][] = $number;
}
print_r($map);
// Array
// (
// [P] => Array
// (
// [0] => 1
// [1] => 3
// )
//
// [T] => Array
// (
// [0] => 2
// [1] => 6
// )
//
// [R] => Array
// (
// [0] => 4
// )
//
// [C] => Array
// (
// [0] => 5
// )
//
// )
print_r($map['T']);
// Array
// (
// [0] => 2
// [1] => 6
// )
print_r($map['P']);
// Array
// (
// [0] => 1
// [1] => 3
// )
答案 3 :(得分:1)
将其用作
$t = '1-P,2-T,3-P,4-R,5-C,6-T,';
$data = explode(",", $t);
print_r($data);
$row=array();
for ($i = 0; $i <= count($data); $i++) {
if (!empty($data[$i])) {
if (strpos($data[$i], '-T') !== false) {// pass find value here
$final = explode("-", $data[$i]);
$row[]=$final[0];
}
}
}
print_r($row);
<强>输出强>
Array
(
[0] => 2
[1] => 6
)
<强> DEMO 强>
答案 4 :(得分:1)
$t = '1-P,2-T,3-P,4-R,5-C,6-T,';
$temp = [];
// if the last comma is not typo the 3rd argument `-1` omit empty item
$array = explode(",", $t, -1);
foreach($array as $arr) {
list($v, $k) = explode('-', $arr);
$temp[$k][] = $v;
}
print_r($temp['T']);
<强> demo 强>