【问题标题】:Create PHP associative array from another array从另一个数组创建 PHP 关联数组
【发布时间】:2015-01-29 11:37:22
【问题描述】:

我只是想知道如何从另一个数组创建一个数组。我有这个多维数组。

Array(
    [0] => Array(
            [c] => Array(
                    [0] => Array(
                            [v] => Commercial
                        )    
                    [1] => Array(
                            [v] => 2
                        )    
                )    
        )

    [1] => Array(
            [c] => Array(
                    [0] => Array(
                            [v] => Infrastructure
                        )    
                    [1] => Array(
                            [v] => 47
                        )    
                )    
        )

    [2] => Array(
            [c] => Array(
                    [0] => Array(
                            [v] => Tourist & Recreational
                        )    
                    [1] => Array(
                            [v] => 3
                        )    
                )    
        ) 
)

我想从上面的数组动态创建下面的数组。

Array
(
    [Commercial] => 2
    [Infrastructure] => 47
    [Tourist & Recreational] =3 
)

感谢任何帮助。

【问题讨论】:

  • 让每个数组成员都有一个子数组几乎没有任何价值,例如0 => array( 'c' => array 如果实际值处于同一水平,您可以使用 array_column 来获取您的想法。
  • 一些关于如何开始使用这种奇怪的数组结构的上下文会很有帮助。可以说,任何可以生成第一个数组的东西都可以更轻松地生成第二个。
  • 第一个数组是为谷歌图表创建的。出于某种原因,我需要从第一个数组(JSON 对象)创建第二个数组。

标签: php arrays multidimensional-array associative-array


【解决方案1】:

假设你上面的数组在 $array 中。所以,

$new_arr = array();
foreach($array as $val){
  if(isset($val['c'][0]['v']) && isset($val['c'][1]['v'])){
     $new_arr[$val['c'][0]['v']] = $val['c'][1]['v'];
  }
}
print_r($new_arr);

【讨论】:

    【解决方案2】:

    在这种情况下,array_walk_recursive() 函数是你的答案,这个解决方案有点脏,但一般函数只能在叶子节点上运行,所以它绝对是要走的路:

    <?php
    
    
    $arr = [
        0 => [
                'c' => [
                        0 => [
                                'v' => 'Commercial'
                            ]    ,
                        1 => [
                                'v' => 2
                            ]    ,
                    ]    
            ],
    
        1 => [
                'c' => [
                        0 => [
                                'v' => 'Infrastructure'
                            ]    ,
                        1 => [
                                'v' => 47
                            ]    ,
                    ]    
            ],
    
        2 => [
                'c' => [
                        0 => [
                                'v' => 'Tourist & Recreational'
                            ]    ,
                        1 => [
                                'v' => 3
                            ]    ,
                    ]    
            ] 
    ];
    global $array_clean;
    function pluck_leaves( $item, $key ) {
        global $array_clean;
        if ( is_numeric( $item ) ) {
            if ( isset( $array_clean['temp_key'] ) ) {
                $array_clean[$item] = $array_clean['temp_key'];
                unset( $array_clean['temp_key'] );
            } else {
                $array_clean[$item] = null;
            }
        } else {
            $last_key = key(end($array_clean));
    
            reset( $array_clean );
            if ($array_clean[ $last_key ] !== null) {
                $array_clean[ $last_key ] = $item;
            } else {
                $array_clean['temp_key'] = $item;
            }
    
        }
    }
    array_walk_recursive($arr, 'pluck_leaves' );
    
    var_dump($array_clean);
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 2013-08-21
      • 2021-10-16
      相关资源
      最近更新 更多