一个二维数组,
 
$ads_array = array (
  0 => 
  array (
    'id' => '20',
    'sortid' => '0',
    'expired' => '2009-12-31 22:30:25',
    'ad_url' => 'http://www.xxx.com/',
    'ad_file' => '../upload/ads/1243839387.swf',
  ),
  1 => 
  array (
    'id' => '33',
    'sortid' => '16',
    'expired' => '2009-09-15 16:46:42',
    'ad_url' => 'http://www.xxx.com.cn/',
    'ad_file' => '../upload/ads/1247647849.swf',
  ),
  2 => 
  array (
    'id' => '41',
    'sortid' => '0',
    'expired' => '2009-12-31 22:31:13',
    'ad_url' => 'http://www.xxx.com.cn/',
    'ad_file' => '../upload/ads/1243839326.swf',
  ),
  3 => 
  array (
    'id' => '47',
    'sortid' => '16',
    'expired' => '2009-12-31 23:31:11',
    'ad_url' => 'http://www.xxx.com.cn/',
    'ad_file' => '../upload/ads/1243839326.swf',
  ),
);这是一个广告展示程序,我想从这个二维数组里随机获取一个一维数组。但有一个条件,子数组里的sortid字段不为0的要优先获取,如是全为0则随机取一条。也就是说像上面的例子里期待只取到数组一、数组三的一条随机数据。不知可有什么方法?

解决方案 »

  1.   

    根据sortid排一下序,然后取第一条就OK了
      

  2.   

    给你个思路,好象PHP里面有相应的函数,要是没有,你就把所有的sortid和他所在的键取出来,把sortid做一个新数组的键,把取出来的键做值,用函数排序好,然后键和值对换一下,在对应你发出来的数组,想怎么取都行了!
      

  3.   

    $ads_array = array (
      0 => 
      array (
        'id' => '20',
        'sortid' => '0',
        'expired' => '2009-12-31 22:30:25',
        'ad_url' => 'http://www.xxx.com/',
        'ad_file' => '../upload/ads/1243839387.swf',
      ),
      1 => 
      array (
        'id' => '33',
        'sortid' => '16',
        'expired' => '2009-09-15 16:46:42',
        'ad_url' => 'http://www.xxx.com.cn/',
        'ad_file' => '../upload/ads/1247647849.swf',
      ),
      2 => 
      array (
        'id' => '41',
        'sortid' => '0',
        'expired' => '2009-12-31 22:31:13',
        'ad_url' => 'http://www.xxx.com.cn/',
        'ad_file' => '../upload/ads/1243839326.swf',
      ),
      3 => 
      array (
        'id' => '47',
        'sortid' => '16',
        'expired' => '2009-12-31 23:31:11',
        'ad_url' => 'http://www.xxx.com.cn/',
        'ad_file' => '../upload/ads/1243839326.swf',
      ),
    );foreach($ads_array as $k=>$v)
    {
    $v['sortid'] === '0' ? ($n1[$k] = 1) : ($n2[$k] = 1);
    }$k = array_rand(count($n2)?$n2:$n1,1);
    print_r($ads_array[$k]);