2015-11-29 5 views
-2

Я хочу, чтобы разобрать этот массив:Как разобрать этот массив

[ 
'field__i_dont_need' => 'foo', 
'another_field_i_dont_need' => 'bar', 
'user_name_1' => 'John', 
'user_email_1' => '[email protected]', 
'user_name_2' => 'Jane', 
'user_email_2' => '[email protected]' 
] 

к

$users = [ 
    0 => [ 
    'name' => 'John', 
    'email' => '[email protected]' 
    ], 
    1 => [ 
    'name' => 'Jane', 
    'email' => '[email protected]' 
    ] 
] 

Я думаю, что, возможно, потребуется некоторое регулярное выражение магии, но им не уверены.

+1

Stack Overflow не сообщество сосредоточено на выполнении чужой работы. Ваш шанс получить помощь будет увеличиваться, если вы добавите все, что пытались решить вашу проблему. – Mike

+0

@Michal Спасибо за комментарий. Я запомню это. –

ответ

0

Как насчет

$outarray = []; 
foreach ($inarray as $k => $v) 
    if (preg_match("/^user_(name|email)_(\d+)$/", $k, $m)) 
     $outarray[ $m[2] ][ $m[1] ] = $v; 

Он будет производить ключи 1 и 2 в $outarray, а не 0 и 1 но $outarray = array_values($outarray) бы исправить.

+0

Я отредактировал вопрос, исходный массив содержит поля, которые мне не нужны. –

+0

Обновлен ответ. – Kenney

1

array_values().

$arr = ['user_name_1' => 'John','user_email_1' => '[email protected]','user_name_2' => 'Jane','user_email_2' => '[email protected]'] 
$new_arr = array_values($arr); 

$j=0; 
$final = array(); 
for($i=0;$i<count($arr)/2;$i++) { 
    $final[$i]['name'] = $new_arr[$j]; 
    $j++; 

    $final[$i]['email'] = $new_arr[$j]; 
    $j++; 
} 
0

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

$data = [ 
    'field__i_dont_need' => 'foo', 
    'another_field_i_dont_need' => 'bar', 
    'user_name_1' => 'John', 
    'user_email_1' => '[email protected]', 
    'user_name_2' => 'Jane', 
    'user_email_2' => '[email protected]' 
]; 

$temp = array(); 
//Take only the fields you need and their transformed key names 
$fields = array(
    'user_name_'=>'name', 
    'user_email_'=>'email' 
    ); 
$i = 0; 

foreach($data as $key => $value) { //For all initial data 
    foreach($fields as $s_key => $s_value) { //For all your field names you want 
     if (strpos($key, $s_key) !== false) { //If it is a field name you want 
      $t = explode($s_key, $key); //Explode to take its values 
      if (!empty($t[1])) { 
       if (empty($temp[$i])) { 
        $temp[$i][$s_value] = $value; 
       } else { 
        $temp[$i][$s_value] = $value; 
        $i++; 
       } 
      } 
     } 
    } 
} 

var_dump($temp); 

Результат:

array (size=2) 
    0 => 
    array (size=2) 
     'name' => string 'John' (length=4) 
     'email' => string '[email protected]' (length=14) 
    1 => 
    array (size=2) 
     'name' => string 'Jane' (length=4) 
     'email' => string '[email protected]' (length=14) 
Смежные вопросы