yii2mod/yii2-array-query

Yii2 component that allows for searching/filtering the elements of an array.

Maintainers

👁 disem

Package info

github.com/yii2mod/yii2-array-query

Type:yii2-extension

pkg:composer/yii2mod/yii2-array-query

Statistics

Installs: 174 438

Dependents: 6

Suggesters: 0

Stars: 35

Open Issues: 0

1.4 2019-08-26 20:03 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 646eee9dd473330a23d0d1d3669143c76465b535

  • Igor Chepurnoi <chepurnoi.igor.woop@gmail.com>

yii2yii2 array queryyii2 array search

This package is auto-updated.

Last update: 2026-06-29 01:01:53 UTC


README

👁 Image

Yii2 ArrayQuery Component


Allows searching/filtering of an array. This component is very useful when displaying array data in GridViews with an ArrayDataProvider.

👁 Latest Stable Version
👁 Total Downloads
👁 License
👁 Build Status

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist yii2mod/yii2-array-query "*"

or add

"yii2mod/yii2-array-query": "*"

to the require section of your composer.json.

Querying Data

You may execute complex query on the array data using [[\yii2mod\query\ArrayQuery]] class. This class works similar to regular [[\yii\db\Query]] and uses same syntax. For example:

$data = [
 [
 'id' => 1,
 'username' => 'admin',
 'email' => 'admin@example.com'
 ],
 [
 'id' => 2,
 'username' => 'test',
 'email' => 'test@example.com'
 ],
];

$query = new ArrayQuery();
$query->from($data);
$query->where(['username' => 'admin']);

$rows = $query->all();

Using with ArrayDataProvider

You may perform filtering using [[\yii2mod\query\ArrayQuery]] class. For example:

<?php

// Some search model
 
/**
 * Setup search function for filtering and sorting.
 * @param $params
 * @return ArrayDataProvider
 */
public function search($params)
{
 $models = User::find()->asArray()->all();

 $query = new ArrayQuery();
 $query->from($models);

 // load the search form data and validate
 if ($this->load($params) && $this->validate()) {
 // adjust the query by adding the filters
 $query->andFilterWhere(['id' => $this->id]);
 $query->andFilterWhere(['status' => $this->status]);
 $query->andFilterWhere(['like', 'username', $this->username]);
 $query->andFilterWhere(['like', 'email', $this->email]);
 }
 
 // prepare the ArrayDataProvider
 return new ArrayDataProvider([
 'allModels' => $query->indexBy('id')->all(),
 'sort' => [
 'attributes' => ['id', 'username', 'email', 'status'],
 ],
 'pagination' => [
 'pageSize' => 10
 ],
 ]);
}

Support us

Does your business depend on our contributions? Reach out and support us on Patreon. All pledges will be dedicated to allocating workforce on maintenance and new awesome stuff.