PHP - 从字符串和值构建数组

PHP - build array from string and values

如何从字符串和值构建数组?

例如:

            string              |        value
                                |   
objectId                        |   19
location.street                 |   Rue des clochets
translations.fr.idTranslation   |   4

结果必须是:

[
    'objectId' => 19,
    'location' => [
        'street' => 'Rue des clochets'
    ],
    'translations' => [
        'fr' => [
            idTranslation => 4
        ],
    ]
]

显然,如果密钥已经存在,则它是完整的,而不是重复的。

喜欢: translation.fr.country |法国

数组将变为:

[
    'object' => 19,
    'location' => [
        'street' => 'Rue des clochets'
    ],
    'translations' => [
        'fr' => [
            'idTranslation' => 4,
            'country'       => 'France'
        ],
    ]
]

我认为,使用 explode 是个好方法,但我没有找到好的语法。

我的方法的头是:

 public function buildArray($key, $value) {

 }

我在foreach中调用这个方法。

数组是属性.

感谢您的帮助。

public function buildArray($key, $value) {   
  $keys = explode('.', $key);

  $x = count($keys) - 1;
  $temp = array($keys[$x] => $value);
  for($i = $x-1; $i >= 0; $i--)
  {
    $temp = array($keys[$i] => $temp);
  }
  return $temp
}

像这样的东西应该有用。如果没有您的一些工作,它没有 运行,请道歉,它未经测试,但它似乎可以工作 https://3v4l.org/3HBAY。 当然,这将为每 key/value 对提供一个数组。您必须将返回数组 (array_merge_recursive) 与您的 foreach 中的结果合并。

下面的代码,你也可以在https://3v4l.org/sLvXp

修改它
<?php

$input = "objectId                        |   19
location.street                 |   Rue des clochets
translations.fr.idTranslation   |   4";

$output = [];

$lines = explode("\n", $input);
foreach ($lines as $line) {
    $cols = explode("|", $line);
    $key = trim($cols[0]);
    $value = trim($cols[1]);
    $indices = explode('.', $key);
    $first = array_shift($indices);
    if (!isset($output[$first]))
        $output[$first] = [];
    $target = &$output[$first];
    foreach ($indices as $index) {
        if (!isset($target[$index])) {
            $target[$index] = [];
            $target = &$target[$index];
        }
    }
    $target = $value;
}

var_dump($output);