Совпадение и разбиение массива строк PHP - PullRequest
1 голос
/ 03 августа 2011

У меня проблемы с поиском кода для этого:

У меня есть этот массив:

$filtros['code']  = 1 
$filtros['name'] = 'John'
$filtros['formacion_c_1'] = 2
$filtros['formacion_c_2'] = 1
$filtros['formacion_c_3'] = 2

И мне нужно поймать номер каждого "formacion_c_ {number}" иего значение

echo "The Formation number {number} has the value $filtros[formacion_c_{number}]";

результат, который мне нужен, выглядит примерно так:

The Formation number 1 has the value 2.
The Formation number 2 has the value 1.
The Formation number 3 has the value 2.

, конечно, решение с некоторым preg_split или preg_match, но я не могу справиться с этим

Ответы [ 2 ]

1 голос
/ 03 августа 2011
foreach($filtros as $key=>$val){
    if(preg_match('/^formacion_c_(\d)+$/', $key, $match) === 1){
        echo "The Formation number {$match[1]} has the value $val";
    }
}

Демо: http://ideone.com/iscQ7

0 голосов
/ 03 августа 2011

Почему бы вам не использовать для этого многомерные массивы?

Вместо:

filtros['formacion_c_1'] = 2
filtros['formacion_c_2'] = 1
filtros['formacion_c_3'] = 2

Почему бы и нет:

filtros['formacion_c']['1'] = 2
filtros['formacion_c']['2'] = 1
filtros['formacion_c']['3'] = 2

[править] Я заметил в комментариях, что вы сказали, что вы получаете этот массив из формы. Вы можете иметь многомерные массивы в формах HTML. [/ Править]

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

$keyStart = 'formacion_c_';
foreach($filtros as $key => $value) {
     if(strstr($key, $keyStart)) {
          $id = str_replace($keyStart, '', $key);
     }
}
...