我有一个数组。
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
,有任何办法可以做到这一点。
谢谢!
答案 0 :(得分:5)
一个简单的foreach
会做..
foreach($arr as $v)
{
list($a,$b)= explode('=',$v);
$new_arr[$a]=(int)trim($b,'"');
}
print_r($new_arr);
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);
答案 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);