Получить конкретный контент из строки

Мне нужно получить числа в виде массива из заданной строки.

Пример строки:

$t = '1-P,2-T,3-P,4-R,5-C,6-T,';

Ожидаемый результат:

  • если я буду искать -T вывод должен быть таким:
массив (
[0] => 2,
[1] => 6
)
  • если это -P:
массив (
[0] => 1,
[1] => 3
)

Я старался var_export(explode("-T,",$t)); но это не сработало, как ожидалось.
Кто-нибудь может дать мне предложение получить это?

3

Решение

Ниже приведено полное целое число, предшествующее поисковому запросу. -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 функции.

4

Другие решения

Здесь уже есть много хороших ответов, но ни один из них не использует подход, заключающийся в том, чтобы сначала поместить данные в лучшую структуру.

Приведенный ниже код преобразует данные в ассоциативные массивы, сопоставляя буквы в массивы чисел, чтобы вы могли затем выполнять повторный поиск по любой букве:

$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
// )
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

Используйте это как

$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

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']);

демонстрация

1
По вопросам рекламы [email protected]