Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Extract common method.

  • Loading branch information...
commit 57d50cd01874435380764b2c17fefa12dde81dd2 1 parent 3d8a955
@markstory markstory authored
Showing with 29 additions and 49 deletions.
  1. +29 −49 lib/Cake/Utility/Set2.php
View
78 lib/Cake/Utility/Set2.php
@@ -226,7 +226,7 @@ protected static function _matches(array $data, $selector) {
public static function insert(array $data, $path, $values = null) {
$tokens = explode('.', $path);
if (strpos($path, '{') === false) {
- return self::_simpleInsert($data, $tokens, $values);
+ return self::_simpleOp('insert', $data, $tokens, $values);
}
$token = array_shift($tokens);
@@ -240,14 +240,15 @@ public static function insert(array $data, $path, $values = null) {
}
/**
- * Inserts values into simple paths.
+ * Perform a simple insert/remove operation.
*
- * @param array $data Data to insert into.
- * @param string $path The path to insert into.
- * @param mixed $values The values to insert.
- * @return array Data with values inserted at $path.
+ * @param string $op The operation to do.
+ * @param array $data The data to operate on.
+ * @param array $path The path to work on.
+ * @param mixed $values The values to insert when doing inserts.
+ * @return array $data.
*/
- protected static function _simpleInsert($data, $path, $values) {
+ protected static function _simpleOp($op, $data, $path, $values = null) {
$_list =& $data;
$count = count($path);
@@ -255,16 +256,27 @@ protected static function _simpleInsert($data, $path, $values) {
if (is_numeric($key) && intval($key) > 0 || $key === '0') {
$key = intval($key);
}
- if ($i === $count - 1 && is_array($_list)) {
- $_list[$key] = $values;
- } else {
- if (!isset($_list[$key])) {
- $_list[$key] = array();
+ if ($op === 'insert') {
+ if ($i === $count - 1 && is_array($_list)) {
+ $_list[$key] = $values;
+ } else {
+ if (!isset($_list[$key])) {
+ $_list[$key] = array();
+ }
+ $_list =& $_list[$key];
+ }
+ if (!is_array($_list)) {
+ return array();
+ }
+ } elseif ($op === 'remove') {
+ if ($i === count($path) - 1) {
+ unset($_list[$key]);
+ } else {
+ if (!isset($_list[$key])) {
+ return $data;
+ }
+ $_list =& $_list[$key];
}
- $_list =& $_list[$key];
- }
- if (!is_array($_list)) {
- return array();
}
}
return $data;
@@ -280,7 +292,7 @@ protected static function _simpleInsert($data, $path, $values) {
public static function remove(array $data, $path) {
$tokens = explode('.', $path);
if (strpos($path, '{') === false) {
- return self::_simpleRemove($data, $path);
+ return self::_simpleOp('remove', $data, $tokens);
}
$token = array_shift($tokens);
@@ -296,38 +308,6 @@ public static function remove(array $data, $path) {
return $data;
}
-/**
- * Remove values along a simple path.
- *
- * @param array $data Array to operate on.
- * @param string $path The path to remove.
- * @return array Data with value removed.
- */
- protected static function _simpleRemove($data, $path) {
- if (empty($path)) {
- return $data;
- }
- if (!is_array($path)) {
- $path = explode('.', $path);
- }
- $_list =& $data;
-
- foreach ($path as $i => $key) {
- if (is_numeric($key) && intval($key) > 0 || $key === '0') {
- $key = intval($key);
- }
- if ($i === count($path) - 1) {
- unset($_list[$key]);
- } else {
- if (!isset($_list[$key])) {
- return $data;
- }
- $_list =& $_list[$key];
- }
- }
- return $data;
- }
-
public static function combine(array $data, $keyPath, $valuePath = null) {
}
Please sign in to comment.
Something went wrong with that request. Please try again.