如何从字符串和值构建数组?
例如:
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中称这种方法。
数组是属性。
感谢您的帮助。
答案 0 :(得分:0)
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。
当然,这将为每个键/值对提供一个数组。您必须将返回的数组(array_merge_recursive
)与您的foreach中的结果合并。
答案 1 :(得分:0)
下面的代码,你也可以在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);