如何在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中通过分隔符将字符串分解为多维数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中通过计数从多维数组中找到最大的数组

在jQuery中通过ajax发送多维复选框数组

PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?

如何在 PHP 中将多维数组“展平”为简单数组? [复制]

如何在 PHP 中将多维数组“展平”为简单数组? [复制]

如何在PHP中将多维数组过滤到另一个?