【问题标题】:Alter keys and values in array php更改数组 php 中的键和值
【发布时间】:2014-06-14 23:42:41
【问题描述】:

我有一个数组。

Array
(
    [0] => min_order_level="5"
    [1] => max_order_level="10"
    [2] => step_order_level="4"
    [3] => product_box="9"
)

我需要的是

Array
(
    [min_order_level] => "5"
    [max_order_level] => "10"
    [step_order_level] => "4"
    [product_box] => "9"
)

我有一个使用foreach 的想法。但是如果没有foreach,有什么办法可以做到这一点。

谢谢!

【问题讨论】:

  • 你可以使用array_flip()read this
  • 不,你不能,因为当前值还包括= 和数字。 OP希望使用字符串部分作为键,然后使用数字(带引号)作为值。
  • 你需要像5这样的数字值还是字符串值"5"(带qoutas)?
  • 我需要像5 这样的整数值。

标签: php arrays function output


【解决方案1】:

一个简单的foreach 就可以了..

foreach($arr as $v)
{
    list($a,$b)= explode('=',$v);
    $new_arr[$a]=(int)trim($b,'"');
}
print_r($new_arr);

Working Demo


没有问题要求的foreach..

$new_arr = array();
array_map(function ($v) use (&$new_arr) { list($a,$b)= explode('=',$v); $new_arr[$a]=(int)trim($b,'"'); },$arr);
print_r($new_arr);

Working Demo

【讨论】:

    【解决方案2】:

    其中一个答案中提到的简单foreach()应该足够了,但是,如果你想使用数组函数,你可以这样做:

    $new = array_combine(
            array_map(function($k){  $ex=explode('=',$k); return $ex[0]; }, $arr)
            ,
            array_map(function($v){  $ex=explode('=',$v); return $ex[1]; }, $arr)
    );
    

    这里的重点是使用explode()= 处的字符串断开,使用array_map() 分别传递所有键和值,然后使用array_combine(). 将它们组合起来

    DEMO

    【讨论】:

      【解决方案3】:

      没有foreach的一行

      $array = [
          0 => 'min_order_level="5"',
          1 => 'max_order_level="10"',
          2 => 'step_order_level="4"',
          3 => 'product_box="9"'];
      
      parse_str(implode('&', $array), $result);
      var_dump($result);
      

      array(4) {
        'min_order_level' =>
        string(3) ""5""
        'max_order_level' =>
        string(4) ""10""
        'step_order_level' =>
        string(3) ""4""
        'product_box' =>
        string(3) ""9""
      }
      

      preg_match_all 的变体

      $string = implode("\n", $array);
      preg_match_all('/(.*)="(.*)"/', $string, $matches);
      $result = array_combine($matches[1], $matches[2]);
      var_dump($result);
      

      【讨论】:

        【解决方案4】:

        不使用foreach,array_walk怎么样

        $new_array = array();
        
        array_walk($array, 'callback');
        
        function callback($item2, $key)
        {
            global $new_array;
            $parts = explode('=',$item2);
            $new_array[$parts[0]]=$parts[1];    
        }
        
        print_r($new_array);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-10
          • 1970-01-01
          • 2013-12-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多