搜索

首页  >  问答  >  正文

PHP:如何使用内置函数处理数组的键值

需求

$tempArray = array(
    0=>"1:A",
    1=>"2:B",
    2=>"3:C",
    3=>"4:D",
    4=>"5:E",
);

转成:

$tempArray = array(
    "A"=>1,
    "B"=>2,
    "C"=>3,
    "D"=>4,
    "E"=>5,                 
);

本来想使用php的内置函数array_map来处理的,但是没有成功,除了遍历之外,我更想直接使用php的内置函数来实现,请问代码应该怎么写呢?

天蓬老师天蓬老师2817 天前866

全部回复(4)我来回复

  • 天蓬老师

    天蓬老师2017-04-10 14:51:34

    一定要用array_map(不支持key),这是一个方法.

    $tempArray = array(
        0=>"1:A",
        1=>"2:B",
        2=>"3:C",
        3=>"4:D",
        4=>"5:E",
    );
    
    $result = array();
    
    array_map(function($value) use (&$result) {
        list($k,$v) = explode(":", $value);
        $result[$k] = $v;
    },$tempArray);
    

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:51:34

    $array = array(
        0=>"1:A",
        1=>"2:B",
        2=>"3:C",
        3=>"4:D",
        4=>"5:E",
    );
    //处理
    $array1 = array();
    array_walk($array, function($val,$key,$fix) use(&$array1){ 
        $v = explode($fix, $val);
        $array1[$v[1]] = $v[0];   
    },':');
    var_dump($array1); 
    /* 输出
    array (size=5)
      'A' => string '1' (length=1)
      'B' => string '2' (length=1)
      'C' => string '3' (length=1)
      'D' => string '4' (length=1)
      'E' => string '5' (length=1)
    */
    

    补充:

    array_walk($array, function($val,$key,$arr){ 
        $v = explode(":", $val);
        $arr[0][$v[1]] = $v[0];   
    },array(&$array1));
    

    这么处理也是可以的

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-10 14:51:34

    $arr = ["1:A", "2:B", "3:C", "4:D", "5:E"];
    
    $arr = json_decode("{".implode(',', array_map(function($item){
        return preg_replace('/(.+?):(.+?)/', '"$2":"$1"', $item);
    }, $arr))."}", true);
    print_r($arr);
    /** output
    Array
    (
        [A] => 1
        [B] => 2
        [C] => 3
        [D] => 4
        [E] => 5
    )
    **/
    

    如果值里头的:唯一的话可以这么做,为了显得狂拽一点缩成一句话了,可能有点难看懂。

    回复
    0
  • 高洛峰

    高洛峰2017-04-10 14:51:34

    array_mapexplode拆冒号
    array_combine拼接

    回复
    0
  • 取消回复