private function filterModels($filter)
 {
     if (is_array($filter)) {
         foreach ($filter as $key => $keyValue) {
             if (is_array($keyValue)) {
                 if ($keyValue[0] == 'strict') {
                     $this->allModels = Arrays::filter($this->allModels, function ($value) use($key, $keyValue) {
                         return $value[$key] == $keyValue[1];
                     });
                 }
             } elseif (is_bool($keyValue)) {
                 $this->allModels = Arrays::filterBy($this->allModels, $key, $keyValue);
             } else {
                 // todo: Optimize filter with param for "like" and "equal" filtering
                 if ($key === 'slug') {
                     $this->allModels = Arrays::filterBy($this->allModels, $key, $keyValue);
                 } else {
                     $this->allModels = Arrays::filter($this->allModels, function ($value) use($key, $keyValue) {
                         if (!empty($value[$key]) && is_array($value[$key])) {
                             $value[$key] = Arrays::implode($value[$key], "||");
                         } elseif (strpos($key, "|") !== false) {
                             $key = str_replace("|", ".", $key);
                         }
                         $array = new Underscore($value);
                         return stripos($array->get($key), html_entity_decode($keyValue)) !== false;
                     });
                 }
             }
         }
     }
 }
示例#2
0
 public function testFilterBy()
 {
     $a = array(array('id' => 123, 'name' => 'foo', 'group' => 'primary', 'value' => 123456, 'when' => '2014-01-01'), array('id' => 456, 'name' => 'bar', 'group' => 'primary', 'value' => 1468, 'when' => '2014-07-15'), array('id' => 499, 'name' => 'baz', 'group' => 'secondary', 'value' => 2365, 'when' => '2014-08-23'), array('id' => 789, 'name' => 'ter', 'group' => 'primary', 'value' => 2468, 'when' => '2010-03-01'), array('id' => 888, 'name' => 'qux', 'value' => 6868, 'when' => '2015-01-01'), array('id' => 999, 'name' => 'flux', 'group' => null, 'value' => 6868, 'when' => '2015-01-01'));
     $b = Arrays::filterBy($a, 'name', 'baz');
     $this->assertCount(1, $b);
     $this->assertEquals(2365, $b[0]['value']);
     $b = Arrays::filterBy($a, 'name', array('baz'));
     $this->assertCount(1, $b);
     $this->assertEquals(2365, $b[0]['value']);
     $c = Arrays::filterBy($a, 'value', 2468);
     $this->assertCount(1, $c);
     $this->assertEquals("primary", $c[0]['group']);
     $d = Arrays::filterBy($a, 'group', 'primary');
     $this->assertCount(3, $d);
     $e = Arrays::filterBy($a, 'value', 2000, 'lt');
     $this->assertCount(1, $e);
     $this->assertEquals(1468, $e[0]['value']);
     $e = Arrays::filterBy($a, 'value', array(2468, 2365), 'contains');
     $this->assertCount(2, $e);
     $this->assertContains(2468, Arrays::pluck($e, 'value'));
     $this->assertNotContains(1468, Arrays::pluck($e, 'value'));
     $e = Arrays::filterBy($a, 'when', '2014-02-01', 'older');
     $this->assertCount(2, $e);
     $this->assertContains('2014-01-01', Arrays::pluck($e, 'when'));
     $this->assertContains('2010-03-01', Arrays::pluck($e, 'when'));
     $this->assertNotContains('2014-08-23', Arrays::pluck($e, 'when'));
     $f = Arrays::filterBy($a, 'group', 'primary', 'ne');
     $this->assertCount(3, $f, 'Count should pick up groups which are explicitly set as null AND those which don\'t have the property at all');
     $this->assertContains('qux', Arrays::pluck($f, 'name'));
     $this->assertContains('flux', Arrays::pluck($f, 'name'));
 }
示例#3
0
 public function testFilterBy()
 {
     $a = array(array('id' => 123, 'name' => 'foo', 'group' => 'primary', 'value' => 123456, 'when' => '2014-01-01'), array('id' => 456, 'name' => 'bar', 'group' => 'primary', 'value' => 1468, 'when' => '2014-07-15'), array('id' => 499, 'name' => 'baz', 'group' => 'secondary', 'value' => 2365, 'when' => '2014-08-23'), array('id' => 789, 'name' => 'ter', 'group' => 'primary', 'value' => 2468, 'when' => '2010-03-01'));
     $b = Arrays::filterBy($a, 'name', 'baz');
     $this->assertCount(1, $b);
     $this->assertEquals(2365, $b[0]['value']);
     $b = Arrays::filterBy($a, 'name', array('baz'));
     $this->assertCount(1, $b);
     $this->assertEquals(2365, $b[0]['value']);
     $c = Arrays::filterBy($a, 'value', 2468);
     $this->assertCount(1, $c);
     $this->assertEquals("primary", $c[0]['group']);
     $d = Arrays::filterBy($a, 'group', 'primary');
     $this->assertCount(3, $d);
     $e = Arrays::filterBy($a, 'value', 2000, 'lt');
     $this->assertCount(1, $e);
     $this->assertEquals(1468, $e[0]['value']);
     $e = Arrays::filterBy($a, 'value', array(2468, 2365), 'contains');
     $this->assertCount(2, $e);
     $this->assertContains(2468, Arrays::pluck($e, 'value'));
     $this->assertNotContains(1468, Arrays::pluck($e, 'value'));
     $e = Arrays::filterBy($a, 'when', '2014-02-01', 'older');
     $this->assertCount(2, $e);
     $this->assertContains('2014-01-01', Arrays::pluck($e, 'when'));
     $this->assertContains('2010-03-01', Arrays::pluck($e, 'when'));
     $this->assertNotContains('2014-08-23', Arrays::pluck($e, 'when'));
 }