public function testCanImplodeAnArray()
 {
     $array = Arrays::implode($this->array, ',');
     $this->assertEquals('bar,ter', $array);
 }
 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;
                     });
                 }
             }
         }
     }
 }