HelloCSE/app/Http/Utility/arrayUtility.php

241 lignes
8,4 Kio
PHP
Brut Vue normale Historique

2024-04-10 13:56:22 +02:00
<?php
namespace App\Http\Utility;
/**
* Classe contenant quelques fonctions utiles pour le traitement des
* tableaux PHP.
*/
class arrayUtility{
/**
* Methode alternative à la fonction PHP array_merge() en évitant les
* erreurs si les paramètres ne sont pas des array(), et en prenant
* également en compte des objets.
*/
public static function arrayMerge(){
$args = func_get_args();
$arrayMerged = array();
foreach($args as $argsData){
if(is_array($argsData) || is_object($argsData)){
$arrayMerged = array_merge($arrayMerged,$argsData);
}
}
return $arrayMerged;
}
/**
* Methode servant à ajouter un préfix aux valeurs d'un tableau.
*
* @param array $array : données à traiter
* @param string $prefix : préfixe
*
* @return array
*/
public static function addPrefixedValues($array=array(),$prefix=''){
if(is_array($array) && count($array)>0 && $prefix!=''){
array_walk_recursive($array, function(&$val, $key) use($prefix){
$val = $prefix.$val;
});
}
return $array;
}
/**
* Methode servant à filtrer un tableau en fonction d'une valeur
* à rechercher.
*
* @param array $array : données à traiter
* @param array $value : valeur à rechercher (peut être une portion)
*
* @return array
*/
//public static function arrayFilterByValue( array $array, string $value){
public static function arrayFilterByValue( $array=array(), $value=''){
return array_filter($array, function($v) use ($value) {
return ( strpos($v, $value) !== false );
});
}
/**
* Methode servant à filtrer un tableau en fonction d'un tableau de
* valeurs à rechercher.
*
* @param array $array : données à traiter
* @param array $values : valeurs à rechercher (peut être une portion)
*
* @return array
*/
//public static function arrayFilterByArrayValues( array $array, array $values){
public static function arrayFilterByArrayValues( $array=array(), $values=array()){
return array_filter($array, function($v) use ($values){
return array_filter($values, function($value) use ($v) {
return ( strpos($v, $value) !== false );
});
});
}
/**
* Methode servant filtrer et ordonner un tableau selon un tableau de
* valeurs à ordonner.
*
* @param array $arrayOrder : données ordonnées
* @param array $arrayDatas : données à vérifier
*
* @return array
*/
//public static function arrayFilteredAndOrderedFromArray( array $arrayOrder, array $arrayDatas){
public static function arrayFilteredAndOrderedFromArray( $arrayOrder=array(), $arrayDatas=array()){
$arrayFilteredAndOrdered = array();
foreach ($arrayOrder as $order){
foreach ($arrayDatas as $value){
( strpos($value, $order) !== false ) ? array_push($arrayFilteredAndOrdered, $value):null;
}
}
return $arrayFilteredAndOrdered;
}
/**
* Alternative à la fonction PHP : array_walk_recursive(), si ce n'est
* que cette dernière ne garde la clef du dernier niveau de tableau.
* Ici, nous avons besoin d'avoir l'arbre complet pour génerer une URL.
*
* @param array $input : Pointeur du tableau d'entrée.
* @param callable $userFunction : Fonction de callback.
* /!\ Etant dans une classe, la fonction sera donc une méthode
* à appeler de la forme suivante : array($this, 'nomMethod').
* @param mixed $userData : Données spécifique pour la fonction callback
*
* @return void.
*/
public static function arrayWalkRecursive(&$input,$userFunction=null,$userData=null){
foreach ($input as $key => $value){
$cPath = (!is_int($key)) ? $key.DIRECTORY_SEPARATOR : '';
if (is_array($value)){
call_user_func_array($userFunction,
array(
$value, $key, $userData.$cPath
)
);
$this->arrayWalkRecursive($value, $userFunction, $userData.$cPath);
}else{
call_user_func_array($userFunction,
array(
$value, $key, $userData
)
);
}
}
}
/*
*
*/
//public static function array2CommaAndQuotesSeparatedList(array $array){
public static function array2CommaAndQuotesSeparatedList($array=array()){
return "'" . implode("','", $array) . "'";
}
/*
*
*/
//public static function removeEmptyArrayElements(array $array){
public static function removeEmptyArrayElements($array=array()){
return array_filter($array, function($value) { return $value !== ''; });
}
/*
*
*/
//public static function addQuotesOnlyStringElements(array $array){
public static function addQuotesOnlyStringElements($array=array()){
$pattern = '/(?!^\d+$)^.+$/i';
$replacement = "'$0'";
return preg_replace($pattern, $replacement, $array);
}
/*
*
*/
public static function cleanSubArrayWithOneElement($array=array()){
array_walk($array, [__CLASS__, 'array2StringIfOnlyOneElement']);
return $array;
}
/*
*
*/
public static function array2StringIfOnlyOneElement(&$input){
if(is_array($input)){
if(count($input, COUNT_RECURSIVE) == 1){
$input = $input[0];
return;
}
array_walk($input, [__CLASS__, __METHOD__]);
}
}
/*
*
*/
public static function getArrayByMultiSearchArray(array $array, array $multiSearch){
$found = array();
foreach ($array as $aKey => $aVal) {
$pairs = 0;
foreach ($multiSearch as $searchKey => $searchVal) {
if (array_key_exists($searchKey, $aVal) && $aVal[$searchKey] == $searchVal) {
$pairs++;
}
}
if ($pairs == count($multiSearch)) {
$found[$aKey] = $aVal;
}
}
return $found;
}
/*
*
*/
public static function concatValuesEveryNthColumns(array $array, int $nth=2, string $separator=''){
$key=0;
$cpt = 0;
$finalArray = array();
foreach($array as $values){
if ($cpt==$nth) {
$cpt = 0;
++$key;
}
if ($cpt<$nth) {
$finalArray[$key][] = $values;
}
$cpt++;
}
foreach($finalArray as $k=>$grpArr){
$concatValues = implode($separator, $grpArr);
$finalArray[$k] = trim($concatValues);
}
return $finalArray;
}
/*
*
*/
public static function selectEveryNthItemFromArray(array $array, int $nth=2, int $start=1){
$finalArray = array();
$cpt = $start;
foreach($array as $value) {
if ($cpt++ % $nth == 0) {
$finalArray[] = trim($value);
}
}
return $finalArray;
}
}