Created
August 1, 2012 05:04
-
-
Save intel352/3223862 to your computer and use it in GitHub Desktop.
Some Yii-based code to group contiguous array entries
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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