如何在PHP中通过分隔符将字符串分解为多维数组
Posted
技术标签:
【中文标题】如何在PHP中通过分隔符将字符串分解为多维数组【英文标题】:How to break string by separator into multidimensional array in PHP 【发布时间】:2017-07-06 11:30:26 【问题描述】:我有一个字符串“value1/value2”。所需的输出是 $_SESSION['value1']['value2']。我尝试使用explode,然后使用array_reduce 来处理explode 值,但没有成功。
我的代码看起来像
function set($key, $value)
/* code */
set('key1/key2', 'some_text');
像$_SESSION['key1']['key2'] = 'some_text';
这样的必需输出
key1/key2 不固定,可能是 'key1' 或 'key1/key2/key3' 等等。 任何人都可以摆弄它是非常值得赞赏的。 谢谢
【问题讨论】:
你不应该完全改变问题,使原始文本的答案变得无用......在这种情况下从值访问到赋值 【参考方案1】:通过键路径字符串访问值,就像在您的原始问题中一样,使用您的原始想法并让 array_reduce 完成工作,如下所示:
$session = ['value1' => [ 'value2' => [ 'value3' => 'there you are!' ]]];
$path = explode('/', 'value1/value2/value3');
$val = array_reduce($path,
function(&$carry, $key) return $carry[$key];,
$session);
echo $val
--> "there you are!"
可以设置一个值,例如像这样,按照引用的路径,根据需要创建数组:
function set($path, $value)
$path = explode('/', $path);
$key = array_pop($path);
$arr = &$_SESSION;
foreach($path as $part)
// carefull, this might lose values to accommodate
// the structure wanted with $path
(isset($arr[$part]) && is_array($arr[$part])) || ($arr[$part] = []);
$arr =& $arr[$part];
$arr[$key] = $value;
;
【讨论】:
感谢汤姆的帮助。我在 if(isset($arr[$part]) && is_array($arr[$part]) || ($arr[$part] = [])) $arr =& $arr[$部分];这解决了我对两个数组元素的问题,但它对三个或更多数组元素给出了不希望的结果。我们是否可以编写类似的代码来为任意数量的元素提供所需的结果。例如 key1/key2/key3 或 key1/key2/key3/key4 等等。现在二维码没问题。 这应该适用于任何大小的路径。我用长度 3 对其进行了测试。但是有一个错字,你发现了错误,但修复是错误的 - 我将它更正为预期的形式,让我们看看这是否解决了你的问题。 如果没有(我添加了一个缺失的)
),我很乐意再看看为什么它似乎对我有用,并且可能不会(我在 psysh 中使用@987654324 对其进行了测试@ 作为闭包)
是的,我明白了。现在它完美地工作了。谢谢你的好主意。【参考方案2】:
试试这个
<?php
session_start();
$string = 'value1/value2';
$array = explode("/",$string);
$_SESSION[$array[0]][$array[1]] = "ccccccc";//$_SESSION['value1']['value2']
【讨论】:
兄弟,我们不能像这样静态添加代码 $_SESSION[$array[0]][$array[1]] 因为'value1/value2'不是固定的。字符串中可能有一个或多个 /。感谢您的帮助。【参考方案3】:对于一般情况(即超过两个部分),您需要遍历段,并逐步索引到目标数组:
<?php
$string = 'value1/value2/value3';
$_SESSION = ['value1' => ['value2' => ['value3' => 'My String']]];
$target = $_SESSION;
foreach (explode('/', $string) as $piece)
$target =& $target[$piece];
echo $target; // My String
【讨论】:
以上是关于如何在PHP中通过分隔符将字符串分解为多维数组的主要内容,如果未能解决你的问题,请参考以下文章