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);
如何从字符串和值构建数组?
例如:
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);