如果键值存在,则在多维数组中随机取消设置元素

时间:2014-10-14 10:23:56

标签: php arrays

我在PHP中有一个多维数组,采用以下形式:

$data = array(
              array('spot'=>1,'name'=>'item_1'),
              array('spot'=>2,'name'=>'item_2'),
              array('spot'=>1,'name'=>'item_3'),
             );

如果多个数组元素包含“' spot'我希望随机选择一个,并使用相同的“斑点”取消所有其他元素。值。执行此操作的最有效方法是什么?结果数组看起来像:

$data = array(
              array('spot'=>2,'name'=>'item_2'),
              array('spot'=>1,'name'=>'item_3'),
             );

1 个答案:

答案 0 :(得分:3)

spot的值存储在另一个数组中。使用array_count_values检查哪些值出现多次。找到这些值的键。选择一个随机密钥。从原始阵列中删除除选定键以外的所有键。这是代码:

$data = array(
              array('spot'=>1,'name'=>'item_1'),
              array('spot'=>2,'name'=>'item_2'),
              array('spot'=>1,'name'=>'item_3'),
        );


$arr = array();
foreach($data as $val){
    $arr[] = $val['spot'];
}

foreach(array_count_values($arr) as $x => $y){
    if($y == 1) continue;
    $keys = array_keys($arr, $x);
    $rand = $keys[array_rand($keys)];
    foreach($keys as $key){
        if($key == $rand) continue;
        unset($data[$key]);
    }
}