从php中的数组中随机获取信息

时间:2014-11-05 20:17:06

标签: php arrays random

我有一个如下所示的数组:

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个值的数组中获取信息,但我希望它是我得到的两个随机女巫。

我该怎么做?

3 个答案:

答案 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)。然后我使用该函数的结果作为过滤数组的索引。