@@ -102,7 +102,7 @@ public static function pluck(array $array, $columns, ?string $index = null) : ar
102102 */
103103 public static function mapDeep (callable $ callback , $ value )
104104 {
105- return map_deep ( $ value , $ callback );
105+ return Data:: mapDeep ( $ callback , $ value );
106106 }
107107
108108 /**
@@ -257,15 +257,26 @@ public static function get($array, $needle, $default = null)
257257 */
258258 public static function has ($ array , $ needle )
259259 {
260- $ search = is_array ($ needle ) ? $ needle : explode ('. ' , $ needle );
260+ $ needles = (array ) $ needle ;
261+ $ main = $ array ;
261262
262- foreach ($ search as $ index ) {
263- if (is_array ($ array ) && array_key_exists ($ index , $ array )) {
264- $ array = $ array [$ index ];
265- }
266- else {
267- return false ;
263+ foreach ($ needles as $ n ) {
264+
265+ $ search = is_array ($ n ) ? $ n : explode ('. ' , $ n );
266+
267+ foreach ($ search as $ index ) {
268+ if (is_array ($ array ) && array_key_exists ($ index , $ array )) {
269+ $ array = $ array [$ index ];
270+ }
271+ elseif ($ array instanceof \ArrayAccess && $ array ->offsetExists ($ index )) {
272+ $ array = $ array [$ index ];
273+ }
274+ else {
275+ return false ;
276+ }
268277 }
278+
279+ $ array = $ main ;
269280 }
270281
271282 return true ;
@@ -431,4 +442,61 @@ public static function keysExist(array $keys, array $array)
431442 {
432443 return !array_diff_key (array_flip ($ keys ), $ array );
433444 }
445+
446+ /**
447+ * Exists
448+ *
449+ * @param \ArrayAccess|array $array
450+ * @param string|int $key
451+ * @return bool
452+ */
453+ public static function exists ($ array , $ key ) : bool
454+ {
455+ if (is_float ($ key )) {
456+ $ key = (string ) $ key ;
457+ }
458+
459+ if ($ array instanceof \ArrayAccess) {
460+ return $ array ->offsetExists ($ key );
461+ }
462+
463+ return array_key_exists ($ key , $ array );
464+ }
465+
466+ /**
467+ * First Item
468+ *
469+ * @param array|\ArrayObject $array
470+ * @return mixed|null
471+ */
472+ public static function first ($ array , $ callback = null , $ default = null )
473+ {
474+ if (is_callable ($ callback ))
475+ {
476+ foreach ($ array as $ key => $ value ) {
477+ if ($ callback ($ value , $ key ) === true ) {
478+ return $ value ;
479+ }
480+ }
481+ }
482+ else
483+ {
484+ foreach ($ array as $ item ) {
485+ return $ item ;
486+ }
487+ }
488+
489+ return $ default ;
490+ }
491+
492+ /**
493+ * Last Item
494+ *
495+ * @param array|\ArrayObject $array
496+ * @return mixed|null
497+ */
498+ public static function last ($ array , $ callback = null , $ default = null )
499+ {
500+ return static ::first (array_reverse ((array ) $ array , true ), $ callback , $ default );
501+ }
434502}
0 commit comments