【问题标题】:string to associative array conversion字符串到关联数组的转换
【发布时间】:2018-01-12 05:30:12
【问题描述】:

我已经为此苦苦挣扎了几天,想把它扔在那里,看看是否有人有任何想法。

基本上我有一个字符串,例如

1) "/0/bar"

2) "/build/0/foo/1"

并需要将其转换为多维数组

1) $result[0][bar] 
2) $result[build][0][foo][1]

到目前为止我已经尝试过:

$query = "/build/0/foo/1";
$queryAr = [];
$current = &$queryAr;
$keys = explode("/", $query);

foreach($keys as $key) {
  @$current = &$current[$key];
}

$current = $value;

使输出安静是实现此目的的一种非常老套的方法...

【问题讨论】:

    标签: php arrays string multidimensional-array


    【解决方案1】:

    您需要修剪字符串的第一个/live demo.

    <?php
    $query = "/build/0/foo/1";
    $queryAr = [];
    $current = &$queryAr;
    $keys = explode("/", trim($query, '/'));
    
    foreach($keys as $key) {
      @$current = &$current[$key];
    }
    
    $current = $value;
    print_r($queryAr);
    

    【讨论】:

    • 似乎是要走的路,但为什么你有 $current = $value?如果您将 $current 用于任何其他目的,最好使用 unset($current) 以避免出现问题。
    【解决方案2】:

    我尝试了递归函数版本:

    $query = "/build/0/foo/1";
    print_r($result = buildNestedArray(explode('/', trim($query, '/'))));
    
    function buildNestedArray($keys)
    {
        $k = current($keys);
    
        $result = [$k => 'DONE'];
        array_shift($keys);
        if (sizeof($keys) > 0) { $result[$k] = buildNestedArray($keys); }
    
        return $result;
    }
    

    输出:Array ( [build] =&gt; Array ( [0] =&gt; Array ( [foo] =&gt; Array ( [1] =&gt; DONE ) ) ) )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      相关资源
      最近更新 更多