$ obj = new asList;
print_r ($ obj->
set (array ("my" => "lol", "dear" => "rofl", "mom" => "hehe")) ->
intersect ("hello, my, dear, friend") ->
merge ("test, yo") ->
fillValuesFrom (array ("yo" => "good test")) ->
asArray ()
); Array ([my] => [dear] => [test] => [yo] => good test)
<? php
/ **
* Associative List class
*
* /
class asList {
private $ _data;
/ **
* New associative list
*
* @param array || string $ data (optional)
* @param string $ clue (optional), if $ data type == string
* /
function __construct ($ data = NULL, $ clue = ",") {
if (! is_null ($ data)) $ this-> set ($ data, $ clue);
}
/ **
* Private function to convert array || string to array
*
* @param array || string $ array_or_string
* @param string (optional) $ clue
* @return array
* /
private function _toArray ($ array_or_string, $ clue = ",") {
if (is_array ($ array_or_string)) {
$ array = $ array_or_string;
} elseif (is_string ($ array_or_string)) {
$ array_or_string = trim ($ array_or_string, $ clue. "");
$ keys = @explode ($ clue, $ array_or_string);
$ array = array_fill_keys ($ keys, '');
}
if (! is_array ($ array)) $ array = array ();
unset ($ array [""]); // data [] not allowed
return $ array;
}
/ **
* Set data to work with
*
* @param arr || str $ array_or_string
* @param string $ clue
* @return asList
* /
public function set ($ array_or_string, $ clue = ",") {
$ array = $ this -> _ toArray ($ array_or_string, $ clue);
$ this -> _ data = $ array;
return $ this;
}
/ **
* Export data as array
*
* @return array
* /
public function asArray () {
return $ this -> _ data;
}
/ **
* Export data keys as string
*
* @param string (optional) $ clue
* @return string
* /
public function asString ($ clue = ",") {
return @implode ($ clue, @array_keys ($ this -> _ data));
}
/ **
* Make string using $ form
*
* @param string $ selected
* @param string $ form - use <key> <value> <selected>
* @param string $ clue
* @return string
* /
public function asStringAdvanced ($ selected = NULL, $ form = "<option value = '<key>' <selected >> <value> </ option>", $ clue = NULL) {
$ data = (is_array ($ this -> _ data))? $ this -> _ data: array ();
while (list ($ key, $ val) = each ($ data)) {
$ data [$ key] = str_replace (
array ("<key>", "<value>", "<selected>"),
array ($ key, $ val, ($ key == $ selected)? "selected": ""),
$ form
);
}
reset ($ data);
return @implode ($ clue, $ data);
}
/ **
* Merge data with another data
*
* @param arr || str $ array_or_string
* @param string (optional) $ clue
* @return asList
* /
public function merge ($ array_or_string, $ clue = ",") {
$ array1 = (is_array ($ this -> _ data))? $ this -> _ data: array ();
$ array2 = $ this -> _ toArray ($ array_or_string, $ clue);
$ this -> _ data = array_merge ($ array1, $ array2);
unset ($ this -> _ data [""]); // data [] not allowed
return $ this;
}
/ **
* Intersect data with another data
* If array, forgot about keys, only values willbe used
*
* @param arr || string $ array_or_string
* @param string (optional) $ clue
* @return asList
* /
public function intersect ($ array_or_string, $ clue = ",") {
if (! is_array ($ array_or_string)) {
$ array = $ this -> _ toArray ($ array_or_string, $ clue);
$ array = array_keys ($ array);
} else {
$ array = array_values ($ array_or_string);
}
foreach ($ array as $ val) {
if (isset ($ this -> _ data [$ val])) $ ret [$ val] = $ this -> _ data [$ val];
}
$ this -> _ data = $ ret;
return $ this;
}
/ **
* Fill data with datas from $ array
*
* @param array $ array - associative array where to get new data from
* @param bool $ preserve_original_if_not_exists - preserves the original value if there are no such key
* @return asList
* /
public function fillValuesFrom ($ array, $ preserve_original_if_not_exists = true) {
while (list ($ key,) = @each ($ this -> _ data)) {
if ($ preserve_original_if_not_exists &&! array_key_exists ($ key, $ array)) {
// preserve original
} else {
$ this -> _ data [$ key] = $ array [$ key];
}
}
reset ($ this -> _ data);
return $ this;
}
/ **
* Remove data with given keys
* If array in values, the values will be used
*
* @param arr || string $ array_or_string - list of keys
* @param string (optional) $ clue
* @return asList
* /
public function remove ($ array_or_string, $ clue = ",") {
if (! is_array ($ array_or_string)) {
$ array = $ this -> _ toArray ($ array_or_string, $ clue);
$ array = array_keys ($ array);
} else {
$ array = array_values ($ array_or_string);
}
foreach ($ array as $ item) {
unset ($ this -> _ data [$ item]);
}
return $ this;
}
public function exists ($ key) {
return (isset ($ this -> _ data [$ key]))? true: false;
}
}
?> Source: https://habr.com/ru/post/40338/
All Articles