【问题标题】:Get unique values from array with specific filtering通过特定过滤从数组中获取唯一值
【发布时间】:2017-06-20 17:40:02
【问题描述】:

对不起,这个标题很糟糕,我不是母语人士,也不知道如何表达。

这是我的问题:

我有一个很长的数组,格式如下:

$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'
    )
);

我尝试了一些方法,但确实没有找到任何不是很长的解决方案,所以我想知道是否有任何提示/技巧可以轻松完成此任务!

非常感谢!

【问题讨论】:

  • 你可以尝试使用in_array(string, $array);

标签: php arrays php-5.6


【解决方案1】:
$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);

【讨论】:

  • 我看到只创建一个 1 秒的级别?可以吗?
  • @Álvaro Touzón 这应该为小伙子提供他需要的格式。
  • 完美运行!非常感谢!
【解决方案2】:

试试这个:

$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;
}

希望它有所帮助。 提示

【讨论】:

  • $val 或 $value 需要更改
【解决方案3】:

使用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
        )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2013-09-15
    相关资源
    最近更新 更多