通过特定过滤从数组中获取唯一值
Get unique values from array with specific filtering
抱歉,标题太糟糕了,我不是母语人士,不知道该如何表达。
这是我的问题:
我有一个很长的数组,格式如下:
$array = array(
'key1.value1' => '1',
'key1.value2' => '0',
'key1.value3' => '1',
'key2.value1' => '0',
'key2.value2' => '0',
'key3.value1' => '1'
);
从这个数组中,我想得到另一个格式如下:
$newArray = array(
'key1' => array(
'value1' => '1',
'value2' => '0',
'value3' => '1'
),
'key2' => array(
'value1' => '0',
'value2' => '0'
),
'key3' => array(
'value1' => '1'
)
);
我尝试了几种方法,但确实没有找到任何不是很长的解决方案,所以我想知道我是否可以 tips/tricks 轻松完成此操作!
非常感谢!
$array = array(
'key1.value1' => '1',
'key1.value2' => '0',
'key1.value3' => '1',
'key2.value1' => '0',
'key2.value2' => '0',
'key3.value1' => '1'
);
$Results = array();
foreach($array as $key=>$value){
$KeyValue = explode(".",$key);
if(!isset($Results[$KeyValue[0]])){
$Results[$KeyValue[0]] = array();
}
$Results[$KeyValue[0]][end($KeyValue)] = $value;
}
print_r($Results);
试试这个:
$generate = [];
foreach($array as $key=>$val ){
list($first, $second) = split('.', $key);
if(!isset($genrate[$first]){
$genrate[$first] = [];
if(!$genrate[$first][$second]){
$genrate[$first][$second]= [];
}
}
$genrate[$first][$second] = $val;
}
希望对您有所帮助。
谢谢
使用 explode()
函数的简短解决方案:
$transformed = [];
foreach ($array as $k => $v) {
$pair = explode('.', $k);
$transformed[$pair[0]][$pair[1]] = $v;
}
print_r($transformed);
输出:
Array
(
[key1] => Array
(
[value1] => 1
[value2] => 0
[value3] => 1
)
[key2] => Array
(
[value1] => 0
[value2] => 0
)
[key3] => Array
(
[value1] => 1
)
)
抱歉,标题太糟糕了,我不是母语人士,不知道该如何表达。
这是我的问题:
我有一个很长的数组,格式如下:
$array = array(
'key1.value1' => '1',
'key1.value2' => '0',
'key1.value3' => '1',
'key2.value1' => '0',
'key2.value2' => '0',
'key3.value1' => '1'
);
从这个数组中,我想得到另一个格式如下:
$newArray = array(
'key1' => array(
'value1' => '1',
'value2' => '0',
'value3' => '1'
),
'key2' => array(
'value1' => '0',
'value2' => '0'
),
'key3' => array(
'value1' => '1'
)
);
我尝试了几种方法,但确实没有找到任何不是很长的解决方案,所以我想知道我是否可以 tips/tricks 轻松完成此操作!
非常感谢!
$array = array(
'key1.value1' => '1',
'key1.value2' => '0',
'key1.value3' => '1',
'key2.value1' => '0',
'key2.value2' => '0',
'key3.value1' => '1'
);
$Results = array();
foreach($array as $key=>$value){
$KeyValue = explode(".",$key);
if(!isset($Results[$KeyValue[0]])){
$Results[$KeyValue[0]] = array();
}
$Results[$KeyValue[0]][end($KeyValue)] = $value;
}
print_r($Results);
试试这个:
$generate = [];
foreach($array as $key=>$val ){
list($first, $second) = split('.', $key);
if(!isset($genrate[$first]){
$genrate[$first] = [];
if(!$genrate[$first][$second]){
$genrate[$first][$second]= [];
}
}
$genrate[$first][$second] = $val;
}
希望对您有所帮助。 谢谢
使用 explode()
函数的简短解决方案:
$transformed = [];
foreach ($array as $k => $v) {
$pair = explode('.', $k);
$transformed[$pair[0]][$pair[1]] = $v;
}
print_r($transformed);
输出:
Array
(
[key1] => Array
(
[value1] => 1
[value2] => 0
[value3] => 1
)
[key2] => Array
(
[value1] => 0
[value2] => 0
)
[key3] => Array
(
[value1] => 1
)
)