php разбить файл на пары $ key => $ value с повторяющимися ключами - PullRequest
1 голос
/ 29 мая 2020

Я пытался обдумать это, и у меня просто заморозили мозги.

У меня есть файл с несколькими строками, каждая строка разделена знаком «=» на отдельные фрагменты данных:

// Example file. Syntax: <key>=<Value>
key1=value1
key1=value2
key1=value3
key2=value1
key2=value2
key3=value1
key3=value2
key3=value3
key3=value4

Мне нужно разбить этот файл на отдельные строки и выбросить их все в массив так, чтобы key1 содержал массив значений1, 2, 3, key2 имел свои значения, key3 имел свои значения, поэтому и так далее. Примерно так:

Array
(
    [key1] => Array
        (
        [0] => value1
        [1] => value2
        [2] => value3
        )
    [key2] => Array
        (
        [0] => value1
        [1] => value2
        )
    [key3] => Array
        (
        [0] => value1
        [1] => value2
        [2] => value3
        [3] => value4
        )
)

Пока что у меня есть следующий код:

$loadFile = file('file.txt');
$returnArray = array();
foreach ($loadFile as $line) {
  $startWith = substr(trim($line), 0, 2);
    if (empty($line) || $startWith == '//') {
          continue;
  }
  list($key, $value) = explode('=', $line);
  $returnArray[$key] = $value;
}
return $returnArray;

Однако все, что я получаю, это:

Array ( [key1] => value3 [key2] => value2 [key3] => value4 )

I Я также пробовал

$loadFile = file('file.txt');
$returnArray = array();
foreach ($loadFile as $line) {
  $startWith = substr(trim($line), 0, 2);
    if (empty($line) || $startWith == '//') {
          continue;
  }
  $exp = explode('=', $line);
  $returnArray[$exp[0]] = $exp[1];
}
return $returnArray;

Что также дает мне тот же результат. Я также пробовал array_merge, который просто помещал все в массив со значением numeri c в качестве ключа.

Ответы [ 3 ]

1 голос
/ 29 мая 2020

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

$returnArray[$key] = $value;

итак, что вы хотите, так это добавить свои значения в подмассив с $key в качестве родителя.

$returnArray[$key][] = $value;

С помощью [] вы добавляете $value к базовому массиву.

0 голосов
/ 29 мая 2020

вы должны добавить свои значения в подмассив $ returnArray [$ key]

array_push($returnArray[$key],$value) ;
0 голосов
/ 29 мая 2020

Для удовольствия просто превратите их в синтаксис массива для файла ini и проанализируйте его:

$result = parse_ini_string(str_replace('=', '[]=', file_get_contents('file.txt')));

Еще веселее, превратите их в строку запроса и проанализируйте ее:

parse_str(str_replace('=', '[]=', implode('&', file('file.txt'))), $result);

Выход обоих:

Array
(
    [key1] => Array
        (
            [0] => value1
            [1] => value2
            [2] => value3
        )

    [key2] => Array
        (
            [0] => value1
            [1] => value2
        )

    [key3] => Array
        (
            [0] => value1
            [1] => value2
            [2] => value3
            [3] => value4
        )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...