Skip to content

Instantly share code, notes, and snippets.

@intel352
Created August 1, 2012 05:04
Show Gist options
  • Save intel352/3223862 to your computer and use it in GitHub Desktop.
Save intel352/3223862 to your computer and use it in GitHub Desktop.
Some Yii-based code to group contiguous array entries
<?php
class Available extends CQueue {
}
class Booked extends CQueue {
}
class Unavailable extends CQueue {
}
class PlayController extends Controller
{
public function actionIndex() {
$arr = array(
array('city'=>'abc','scheduled'=>1,'reserved'=>0),
array('city'=>'abc','scheduled'=>1,'reserved'=>0),
array('city'=>'abc','scheduled'=>0,'reserved'=>0),
array('city'=>'abc','scheduled'=>0,'reserved'=>0),
array('city'=>'abc','scheduled'=>1,'reserved'=>1),
array('city'=>'abc','scheduled'=>1,'reserved'=>1),
array('city'=>'abc','scheduled'=>1,'reserved'=>0),
array('city'=>'abc','scheduled'=>1,'reserved'=>0),
array('city'=>'abc','scheduled'=>1,'reserved'=>0),
array('city'=>'abc','scheduled'=>1,'reserved'=>0),
array('city'=>'abc','scheduled'=>1,'reserved'=>0),
array('city'=>'abc','scheduled'=>1,'reserved'=>0),
array('city'=>'abc','scheduled'=>1,'reserved'=>1),
array('city'=>'efg','scheduled'=>0,'reserved'=>0),
array('city'=>'efg','scheduled'=>0,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>1),
array('city'=>'efg','scheduled'=>1,'reserved'=>1),
array('city'=>'efg','scheduled'=>1,'reserved'=>1),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
array('city'=>'efg','scheduled'=>1,'reserved'=>0),
);
$queue = new CQueue;
$keyMap = array_flip(array('city','scheduled','reserved'));
array_map(function($a)use($queue,$keyMap){
static $hash, $q;
$temphash = md5(serialize(array_intersect_key($a, $keyMap)));
if (!isset($hash) || $temphash !== $hash) {
$hash = $temphash;
if ($a['scheduled']===0)
$class = 'Unavailable';
elseif ($a['scheduled']===1 && $a['reserved']===0)
$class = 'Available';
elseif ($a['scheduled']===1 && $a['reserved']===1)
$class = 'Booked';
/**
* @var $q CQueue
*/
$q = new $class;
/**
* @var $queue CQueue
*/
$queue->enqueue($q);
}
$q->enqueue($a);
}, $arr);
#CVarDumper::dump($queue, 5, true);
foreach($queue as $q) {
$count = count($q);
if ($q instanceof Available && $count<6)
$type = 'Unavailable';
else
$type = get_class($q);
/**
* Loop individual entries for display if needed
*/
/*foreach($q as $qq) {
// $qq is individual entry
}*/
/**
* Quick display hack
*/
echo implode(' | ', array_fill(0, $count, $type)); echo '<br />';
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment