改变数组php中的键和值

时间:2014-04-29 07:08:29

标签: php arrays function output

我有一个数组。

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,有任何办法可以做到这一点。

谢谢!

4 个答案:

答案 0 :(得分:5)

一个简单的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

答案 1 :(得分:1)

没有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);

答案 2 :(得分:1)

其中一个答案中提到的简单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()分别传递所有键和值,并使用{组合它们{3}}

<强> array_combine().

答案 3 :(得分:0)

要做到这一点没有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);