2011-01-24 2 views
1

У меня есть массив сообщений, и я хочу взорвать только его подразделение. Например, у меня есть:взломать подраздел массива?

'value1' => 'a' 
'value2' => 'b' 
'value3' => 'c' 
'name1' => 'Fred' 
'name2' => 'Mary' 
'name3' => 'James' 
'value4' => 'd' 

Я получаю произвольное количество имен среди остальных переменных. Из этого я хочу объединить список этих имен, интерполированных запятыми. Таким образом, для приведенного выше массива, вывод должен быть:

Fred,Mary,James 

Но для любой данной должности, может быть любое число (ну, не любой) имен, все в форме имя #, где # - порядковый номер.

Что это самый простой способ сделать это?

+1

Являются ли имена, всегда ассоциированные с ключами с шаблоном '' name # ''где' # 'является числом? – BoltClock

+0

@BoltClock да. – user151841

ответ

2

простой цикл может сделать трюк:

$names = array(); 
foreach($arr as $k => $v) { 
    if(strpos(strtolower($k), 'name') === 0) { 
     $names[] = $v; 
    } 
} 
echo implode(",", $names); 

Try it here.

+0

Приятно, но я бы заменил 'print_r()' на ... о, вы знаете. – BoltClock

+0

Это почти верно, но последняя строка должна быть чем-то вроде 'implode ($ names, ',');' – user151841

+0

@BoltClock, @ user151841 - С наилучшими пожеланиями: p – karim79

0

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

foreach($array as $val) 
    if(strlen($val) > 1) 
     $result[] = $val; 

echo implode(',', $result); 

Если имена означают значение, где ключи начинаются с именем, вот что вы можете сделать:

foreach($array as $key => $val) 
    if(substr($key,0,4) == 'name') 
     $result[] = $val; 

echo implode(',', $result); 
0

Я бы поставил имена в пост массива .. PHP обрабатывает это очень хорошо ....

<input type="text" name="names[1]" value="" /> 

, то вы можете получить доступ к этому по

$_POST['names'][1] 

И продолжается .. .

foreach($_POST['names'] as $name => $value) 
{ 
    echo $value . ", "; 
} 
Смежные вопросы