File "Collection.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/woo-license-keys/vendor/10quality/wpmvc-mvc/src/Collection.php
File
size: 2.53 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
namespace WPMVC\MVC;
use ArrayObject;
use WPMVC\MVC\Contracts\Sortable;
use WPMVC\MVC\Contracts\JSONable;
use WPMVC\MVC\Contracts\Stringable;
/**
* Holds a collection of model results.
*
* @author Alejandro Mostajo <http://about.me/amostajo>
* @copyright 10Quality <http://www.10quality.com>
* @license MIT
* @package WPMVC\MVC
* @version 1.0.1
*/
class Collection extends ArrayObject implements Sortable, JSONable, Stringable
{
/**
* Sorts results by specific field and direction.
* @since 1.0.0
*
* @param string $attribute Attribute to sort by.
* @param string $sort_flag Sort direction.
*
* @return this for chaining
*/
public function sort_by( $attribute, $sort_flag = SORT_REGULAR )
{
$values = array();
for ( $i = count( $this ) -1; $i >= 0; --$i ) {
$values[] = $this[$i]->$attribute;
}
$values = array_unique($values);
sort( $values, $sort_flag );
$new = new self();
foreach ( $values as $value ) {
for ( $i = count( $this ) -1; $i >= 0; --$i ) {
if ( $value == $this[$i]->$attribute ) {
$new[] = $this[$i];
}
}
}
return $new;
}
/**
* Groups collection by attribute name.
* @since 1.0.0
*
* @param string $attribute Attribute to group by.
*
* @return this for chaining
*/
public function group_by( $attribute )
{
$new = new self();
for ( $i = 0; $i < count( $this ); ++$i ) {
$key = (string)$this[$i]->$attribute;
if ( ! isset( $new[$key] ) )
$new[$key] = new self();
$new[$key][] = $this[$i];
}
return $new;
}
/**
* Returns json string.
* @since 1.0.0
* @since 1.0.1 Checks on inner objects for better conversion.
*
* @param string
*/
public function to_json()
{
$output = [];
// Check on each object
foreach ( $this as $key => $value ) {
$output[$key] = is_object( $value ) && property_exists( $value, 'to_array' )
? $value->to_array()
: is_array( $value ) ? $value : (array)$value;
}
return json_encode( $output );
}
/**
* Returns string.
* @since 1.0.0
*
* @param string
*/
public function __toString()
{
return $this->to_json();
}
}