@@ -227,6 +227,18 @@ public static function except(array $array, array|string $keys): array
227227 return array_diff_key ($ array , array_flip ((array )$ keys ));
228228 }
229229
230+ /**
231+ * Returns the original array except given value(s).
232+ *
233+ * @param array $array (Original array)
234+ * @param array|string $values (Values to remove)
235+ * @return array
236+ */
237+ public static function exceptValues (array $ array , array |string $ values ): array
238+ {
239+ return array_values (array_diff ($ array , (array )$ values ));
240+ }
241+
230242 /**
231243 * Returns only desired key(s) from an array.
232244 *
@@ -375,6 +387,36 @@ public static function order(array $array, array $order): array
375387 return self ::only (array_replace (array_flip ($ order ), $ array ), array_keys ($ array ));
376388 }
377389
390+ /**
391+ * Get random items from array.
392+ *
393+ * If $count is greater than or equal to the number of items on the array,
394+ * the original array is returned in random order.
395+ *
396+ * @param array $array (Original array)
397+ * @param int $count (Number of random items to return)
398+ * @return array
399+ */
400+ public static function getRandomItems (array $ array , int $ count ): array
401+ {
402+
403+ if (count ($ array ) <= $ count ) {
404+ $ shuffled = $ array ;
405+ shuffle ($ shuffled );
406+ return $ shuffled ;
407+ }
408+
409+ $ keys = array_rand ($ array , $ count );
410+
411+ // Ensure $keys is always an array
412+ if (!is_array ($ keys )) {
413+ $ keys = [$ keys ];
414+ }
415+
416+ return array_map (fn ($ key ) => $ array [$ key ], $ keys );
417+
418+ }
419+
378420 /**
379421 * Convert array into a query string.
380422 *
0 commit comments