我在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'),
);
答案 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]);
}
}