|
|
|
|
@@ -1236,12 +1236,22 @@ class Basic
|
|
|
|
|
$path[] = $key_lookin;
|
|
|
|
|
} else {
|
|
|
|
|
foreach ($haystack as $key => $val) {
|
|
|
|
|
if (is_scalar($val) && $val === $needle && empty($key_lookin)) {
|
|
|
|
|
break;
|
|
|
|
|
} elseif (is_scalar($val) && !empty($key_lookin) && $key === $key_lookin && $val == $needle) {
|
|
|
|
|
if (is_scalar($val) &&
|
|
|
|
|
$val === $needle &&
|
|
|
|
|
empty($key_lookin)
|
|
|
|
|
) {
|
|
|
|
|
$path[] = $key;
|
|
|
|
|
break;
|
|
|
|
|
} elseif (is_array($val) && $path = Basic::arraySearchRecursive($needle, $val, $key_lookin)) {
|
|
|
|
|
} elseif (is_scalar($val) &&
|
|
|
|
|
!empty($key_lookin) &&
|
|
|
|
|
$key === $key_lookin &&
|
|
|
|
|
$val == $needle
|
|
|
|
|
) {
|
|
|
|
|
$path[] = $key;
|
|
|
|
|
break;
|
|
|
|
|
} elseif (is_array($val) &&
|
|
|
|
|
$path = Basic::arraySearchRecursive($needle, $val, $key_lookin)
|
|
|
|
|
) {
|
|
|
|
|
array_unshift($path, $key);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
@@ -1380,6 +1390,21 @@ class Basic
|
|
|
|
|
return $merged;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* correct array_diff that does an actualy difference between two arrays.
|
|
|
|
|
* array_diff only checks elements from A that are not in B, but not the
|
|
|
|
|
* other way around.
|
|
|
|
|
* Note that like array_diff this only checks first level values not keys
|
|
|
|
|
* @param array $a array to compare a
|
|
|
|
|
* @param array $b array to compare b
|
|
|
|
|
* @return array array with missing elements from a & b
|
|
|
|
|
*/
|
|
|
|
|
public static function arrayDiff(array $a, array $b): array
|
|
|
|
|
{
|
|
|
|
|
$intersect = array_intersect($a, $b);
|
|
|
|
|
return array_merge(array_diff($a, $intersect), array_diff($b, $intersect));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* search for the needle array elements in haystack and return the ones found as an array,
|
|
|
|
|
* is there nothing found, it returns FALSE (boolean)
|
|
|
|
|
|