【问题标题】:Php array from set of keys来自一组键的 PHP 数组
【发布时间】:2012-05-26 11:08:20
【问题描述】:

发现这篇文章对我有帮助:Split a string to form multidimensional array keys?

当涉及到字符串值时,无论如何它就像一个魅力,但如果数组键包含整数,那么它会错过这些。

这里是演示:

我得到了一组钥匙:

Array
(
    [0] => variable_data
    [1] => 0
    [2] => var_type
)

以及创建嵌套数组的方法

function constructArray( &$array_ptr, $keys, $value )
    {
        // extract the last key
        $last_key = array_pop ( $keys );

        // walk/build the array to the specified key
        while ( $arr_key = strval( array_shift ( $keys ) ) )
        {
            if ( !array_key_exists ( strval($arr_key), $array_ptr ) )
            {
                $array_ptr[ strval($arr_key) ] = array ( );
            }
            $array_ptr = &$array_ptr[ strval($arr_key) ];
        }

        // set the final key
        $array_ptr[ $last_key ] = '$value';
    }

我是这样使用的:

$keys = array(
    'variable_data',
    '0',
    'var_type'
);
    $clean_arr = array();
    constructArray($clean_arr, $keys, 'asd');

但输出看起来像这样:

Array
(
    [variable_data] => Array
        (
            [var_desc] => $value
        )

)

如您所见,variable_data 索引不包含 0 索引。我已经测试了所有我可能知道可以工作的东西,但它没有。谁有更好的线索?

【问题讨论】:

  • 将答案发布为答案,并将答案标记为正确答案。不要将解决方案放在问题中。
  • 啊一直想知道怎么做,但是回答自己的问题时有时间限制:S

标签: php arrays multidimensional-array


【解决方案1】:

解决方案

这是发挥神奇作用的函数:

function constructArray( &$array_ptr, $keys, $value )
    {
        // extract the last key
        $last_key = array_pop ( $keys );

        foreach ( $keys as $arr_key )
        {
             unset($keys[$arr_key]);
             if ( !array_key_exists ( strval($arr_key), $array_ptr ) )
            {
                $array_ptr[ strval($arr_key) ] = array ( );
            }
            $array_ptr = &$array_ptr[ strval($arr_key) ];
        }

        // set the final key
        $array_ptr[ $last_key ] = $value;
    }

用法:

$keys = array('variable_data', '0', 'var_desc');
$clean_arr = array();
constructArray($clean_arr, $keys, 'asd');

// Output
Array
(
    [variable_data] => Array
        (
            [0] => Array
                (
                    [var_desc] => asd
                )

        )

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多