2016-03-16 5 views
1

У меня есть сгенерированный массив в этом формате и хотите генерироваться второй массив, чтобы вписаться в файл, который ожидает определенный форматформат PHP массив массивов в плоский массив

Это массив у меня есть:

(int) 0 => array(
     [Service] => Array 
     (
      [id] => 6948229 
      [document] => Array 
       (
        [number] => 0003928425 
       ) 
     ) 

Это массив я хочу, чтобы построить из предыдущего массива (будет иметь много индексов)

verified[id] 
verified[number] 

до сих пор я построить этот скрипт:

foreach($data as $key=>$value) 
     { 
      echo '<br>key '.$key; 
      foreach($value as $k=>$v) 
      { 
       $Verified[$key]['id'] = $v["id"]; 
       $Verified[$key]['number'] = $v['document']['number']; 

Но просто получите сообщение об ошибке undefined index.

Какие индексы я должен использовать для получения матрицы сглаживания?

+0

Попробуйте использовать 'эхо 'ID:'. $ Службы [ 'ID'];' и 'эхо 'Номер:'. $ Службы [ 'документ'] [ 'номер'] ; ' –

+0

Я думаю, что нет необходимости во второй попытке попробовать ваш код, удалив второй foreach. – Indrajit

+0

Извините, я обновляю формат массива, который начинается с индекса 0 и т. Д.: (Int) 0 => array ( [Service] => Array ( –

ответ

1

Из того, что я могу сделать из вашего вопроса, вы можете сделать что-то вроде этого, чтобы получить желаемый результат,

$Verified = []; //use array() for versions below 5.5 
    foreach($data as $key=>$value) 
      { 
       echo '<br>key '.$key; 
       foreach($value as $k=>$v) 
       { 
        if(is_array($v)){ 
         $Verified[$key]['number'] = $v['document']['number']; 
        } 
        $Verified[$key]['id'] = $v['id']; 
+0

thank'si по-прежнему получает Undefined index, попробует больше –

+0

, есть ли еще элементы в массиве и изменяет структуру массива «document» в других элементах массива ?, где именно вы получаете неопределенный индекс. можете ли вы опубликовать его здесь, пожалуйста. – Vincent

+0

Теперь он работает, у меня больше индексов, кроме сервиса, поэтому я добавляю if ($ k == 'Service'), и он работает, теперь у меня есть массив flatten, готовый вернуться из метода. много! –

1

Пожалуйста, передайте ваш массив этой функции

function arrayconvert($arr) { 
    if (is_array($arr)) { 
    foreach($arr as $k => $v) { 
     if (is_array($v)) { 
     arrayconvert($v); 
     } else { 
     $newarr[$k] = $v; 
     } 
    } 
    } 

    return $newarr; 
} 
1

Там нет необходимости из второго foreach, и вы получаете неопределенный индекс, потому что используете $v['id'] insted $val['id'] в этой строке $Verified[$key]['id'] = $v["id"];

<?php 
$data = array('Service' => array('id' => 6948229,'document' => array ('number' => '0003928425'))); 
$verified = array(); 
foreach($data as $key => $val) 
{ 
    $verified[$key]['id'] = $val['id'];  
    $verified[$key]['number'] = $val['document']['number'];  
} 
echo "<pre>"; print_r($verified); 
?> 

выход

Array 
(
    [Service] => Array 
     (
      [id] => 6948229 
      [number] => 0003928425 
     ) 

) 
Смежные вопросы