Commit e2a57e4b by Antonio Ramirez

Enhance ArrayHelper with popValue method

parent ad26b7d3
......@@ -87,6 +87,35 @@ class ArrayHelper
}
/**
* Removes an item from an array and returns the value. If the key does not exist in the array, the default value
* will be returned instead.
*
* Usage examples,
*
* ~~~
* // $array = array('type'=>'A', 'options'=>array(1,2));
* // working with array
* $type = \yii\helpers\ArrayHelper::getValue($array, 'type');
* // $array content
* // $array = array('options'=>array(1,2));
* ~~~
*
* @param array $array the array to extract value from
* @param string $key key name of the array element
* @param mixed $default the default value to be returned if the specified key does not exist
* @return mixed|null the value of the element if found, default value otherwise
*/
public static function popValue(&$array, $key, $default = null)
{
if (is_array($array)) {
$value = static::getValue($array, $key, $default);
unset($array[$key]);
return $value;
}
return $default;
}
/**
* Indexes an array according to a specified key.
* The input array should be multidimensional or an array of objects.
*
......@@ -284,12 +313,12 @@ class ArrayHelper
$args[] = $column;
}
} else {
$args[] = static::getColumn($array, $key);
$args[] = static::getColumn($array, $key);
}
$args[] = $ascending[$i] ? SORT_ASC : SORT_DESC;
$args[] = $flag;
}
$args[] = &$array;
$args[] = & $array;
call_user_func_array('array_multisort', $args);
}
......
......@@ -12,6 +12,16 @@ class ArrayHelperTest extends \yii\test\TestCase
}
public function testPopvalue()
{
$array = array('name' => 'b', 'age' => 3);
$name = ArrayHelper::popValue($array, 'name');
$this->assertEquals($name, 'b');
$this->assertEquals($array, array('age' => 3));
}
public function testMultisort()
{
// single key
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment