PHP массив содержит строку

#php #arrays

#php #массивы

Вопрос:

я создаю метод, который будет считывать файл с типом application / octet, и вот некоторые из кода. Необработанные данные :

GTHHS;MEKID Interface;5496;2012-07-20;
NM1;081;IN1;980898989;2001-01-15;Mr;Gaf;Uhkil;Uhkil,Gaf;PRI;Gaf

  $contents = file_get_contents($tmp_filename);
 $stringContents = explode(";", $contents); 
  

Теперь это дает мне такой вывод :

 Array
(
    [0] => GTHHS
    [1] => MEKID Interface
    [2] => 5496
    [3] => 2012-07-20
NM1
    [4] => 081
    [5] => IN1
    [6] => 980898989
    [7] => 2001-01-15
    [8] => Mr
    [9] => Gaf
    [10] => Uhkil
    [11] => Uhkil,Gaf
    [12] => PRI
    [13] => Gaf
PR1
    [14] => 081
    [15] => IN1
    [16] => 20730089
    [17] => 7 The Schooner
    [18] => Auhaas
    [19] => Huuula Ave
    [20] =>  
    [21] => Kishma
PR2
    [22] => 081
    [23] => IN1
    [24] => 232323233
    [25] => 400006
    [26] => HGD
    [27] => M
    [28] => M
    [29] => 2007-10-16
    [30] => 1976-03-31
);
  

Как я могу сделать NM1 , PR1 в качестве главы массива, как это :

 Array (
     [NM1] = array(
            [0] => GTHHS 
            [1] => MEKID Interface 
            [2] => 5496 
            [3] => 2012-07-20
            )
);
  

Я планирую также создать внутренний массив [0]- [3] как json.

Комментарии:

1. как определить наличие этих ключей массива (вы упомянули heads) в разнесенных элементах? это связано с появлением новой строки, поскольку у вас здесь есть демодуляция?

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

3. закончил редактирование моего сообщения.

Ответ №1:

Если вы разнесете содержимое по n , у вас будет каждая строка, начинающаяся с этого идентификатора. Если вы затем просто взорвете by ; в этой строке и добавите его как вложенный массив, вы получите его так, как хотите.

На самом деле это выглядит как обычный старый CSV-файл с вашим ifentifier в первой строке. Если это так, попробуйте что-то вроде этого:

 $data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
    while (($row = fgetcsv($handle, 1000, ";", """, "n")) !== FALSE)
    {
        $key = array_shift($row);
        $data[$key] = $row;
    }
    fclose($handle);
}

echo json_encode($data);
  

http://php.net/manual/en/function.str-getcsv.php

Комментарии:

1. спасибо за ваш ответ. файл не csv, а только ФАЙЛ. Он не имеет никакого расширения.