我有一个如下所示的数组:
Array (
[0] => Array ( [id] => 1 [title] => Tv [cat] => 1 [value] => 100 )
[1] => Array ( [id] => 2 [title] => Laptop [cat] => 1 [value] => 200 )
[2] => Array ( [id] => 3 [title] => Phone [cat] => 1 [value] => 100 )
[3] => Array ( [id] => 4 [title] => Painting [cat] => 2 [value] => 100 )
)
我想从其中一个有1个猫值和100个值的数组中获取信息,但我希望它是我得到的两个随机女巫。
我该怎么做?
答案 0 :(得分:1)
<?
$info = array(
array('id' => 1, 'title' => 'Tv', 'category' => '1', 'value' => 100),
array('id' => 2, 'title' => 'Laptop', 'category' => '1', 'value' => 200),
array('id' => 3, 'title' => 'Phone', 'category' => '1', 'value' => 100),
array('id' => 4, 'title' => 'Painting', 'category' => '2', 'value' => 100),
);
$candidates = array();
foreach ($info as $arr) {
if ($arr['category'] == '1' && $arr['value'] == 100) {
$candidates[] = $arr;
}
}
$chosen = $candidates[array_rand($candidates)];
var_dump($chosen);
?>
答案 1 :(得分:0)
假设您的数组位于$array
:
function filterByCatAndValue($a) {
return ($a['cat'] == 1 && $a['value'] == 100);
}
$filteredArray = array_filter($array, "filterByCatAndValue");
shuffle($filteredArray);
$randomElement = array_shift($filteredArray);
答案 2 :(得分:0)
这是基于以下多维数组的建议:
<?php
$multi_dim = array(
array('id' => 1, 'title' => 'Tv', 'cat' => 1, 'value' => 100),
array('id' => 2, 'title' => 'Laptop', 'cat' => 1, 'value' => 200),
array('id' => 3, 'title' => 'Phone', 'cat' => 1, 'value' => 100),
array('id' => 4, 'title' => 'Painting', 'cat' => 2, 'value' => 100),
);
$max = 0;
$call_back = function( $a ) use( &$max ){
if ( $a['cat'] == 1 && $a['value'] == 100 ){
$max++;
return $a;
}
};
$filtered = array_values( array_filter( $multi_dim,$call_back ) );
$rand = mt_rand( 0, $max -1 ); // adjust $max for zero-based array indexing
var_dump( $filtered[$rand] );
?>
Array_filter过滤掉那些cat(egory)为1且值为100的子数组。回调是一个带有使用变量$ max的闭包,它跟踪返回的子数组的数量。将过滤后的数组传递给array_values会导致$ filtered的键顺序,起始索引为零。手册指出mt_rand是一个更好的随机函数(参见http://php.net/mt_rand)。然后我使用该函数的结果作为过滤数组的索引。