241 lignes
8,4 Kio
PHP
241 lignes
8,4 Kio
PHP
|
<?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;
|
||
|
}
|
||
|
|
||
|
}
|