PHP
Les chaînes de caractères
Une chaîne déclarée en multilignes
$body = <<< 'EOF'
Ceci est une chaîne écrite
en plusieurs lignes.
EOF;
Les tableaux
Vérifier si un tableau est associatif
function isAssoc(array $array): bool
{
if (array() === $array) return false;
return array_keys($array) !== range(0, count($array) - 1);
}
Rechercher dans un tableau associatif
$people = array(
2 => array(
'name' => 'John',
'fav_color' => 'green'
),
5=> array(
'name' => 'Samuel',
'fav_color' => 'blue'
)
);
$found_key = array_search('blue', array_column($people, 'fav_color'));
Attention, ça renvoie 1 et non 5 (c'est le 2ème élément du tableau).
Pour un gros tableau, il faut optimiser :
$colors = array_column($people, 'fav_color');
$found_key = array_search('blue', $colors);
Remplacer les clés d'un tableau
$array = ['aaa', 'bbb'];
$keys = ['key1', 'key2'];
$newArray = array_combine(array_map(function($el) use ($keys) {
return $keys[$el];
}, array_keys($array)), array_values($array));
Tri multi-critères
usort ($rows, function ($a, $b) {
$cmpAll = 0;
// code_etape . version
$cmp_code_etape_version = strcmp($a->code_etape . $a->version, $b->code_etape . $b->version);
$cmpAll += $cmp_code_etape_version == 0 ? 0 : ($cmp_code_etape_version > 1 ? 1 : -1) * 1000000;
// nature BLCC
$cmpAll += (($b->nature == 'BLCC' ? 1 : 0) - ($a->nature == 'BLCC' ? 1 : 0)) * 100000;
// nature BLCA
$cmpAll += (($b->nature == 'BLCA' ? 1 : 0) - ($a->nature == 'BLCA' ? 1 : 0)) * 10000;
// nature SEM
$cmpAll += (($b->nature == 'SEM' ? 1 : 0) - ($a->nature == 'SEM' ? 1 : 0)) * 1000;
// code_UE_mere
$cmp_code_UE_mere = strcmp($a->code_UE_mere, $b->code_UE_mere);
$cmpAll += ($cmp_code_UE_mere == 0 ? 0 : ($cmp_code_UE_mere > 0 ? 1 : -1)) * 10;
// code_UE_fille
$cmp_code_UE_fille = strcmp($a->code_UE_fille, $b->code_UE_fille);
$cmpAll += ($cmp_code_UE_fille == 0 ? 0 : ($cmp_code_UE_fille > 0 ? 1 : -1));
return $cmpAll;
});
Variante PHP8
usort ($rows, function ($a, $b) {
return (
// code_etape . version
($a->code_etape . $a->version <=> $b->code_etape . $b->version) * 1000000 +
// nature BLCC
(($b->nature == 'BLCC' ? 1 : 0) - ($a->nature == 'BLCC' ? 1 : 0)) * 100000 +
// nature BLCA
(($b->nature == 'BLCA' ? 1 : 0) - ($a->nature == 'BLCA' ? 1 : 0)) * 10000 +
// nature SEM
(($b->nature == 'SEM' ? 1 : 0) - ($a->nature == 'SEM' ? 1 : 0)) * 1000 +
// nature
($a->nature <=> $b->nature) * 100 +
// code_UE_mere
($a->code_UE_mere <=> $b->code_UE_mere) * 10 +
// code_UE_fille
($a->code_UE_fille <=> $b->code_UE_fille)
);
});
Variante plus élégante
usort ($rows, function ($a, $b) {
return (
$p = 0;
// code_UE_fille
($a->code_UE_fille <=> $b->code_UE_fille) * pow(10, $p++) +
// code_UE_mere
($a->code_UE_mere <=> $b->code_UE_mere) * pow(10, $p++) +
// nature
($a->nature <=> $b->nature) * pow(10, $p++) +
// nature SEM
(($b->nature == 'SEM' ? 1 : 0) - ($a->nature == 'SEM' ? 1 : 0)) * pow(10, $p++) +
// nature BLCA
(($b->nature == 'BLCA' ? 1 : 0) - ($a->nature == 'BLCA' ? 1 : 0)) * pow(10, $p++) +
// nature BLCC
(($b->nature == 'BLCC' ? 1 : 0) - ($a->nature == 'BLCC' ? 1 : 0)) * pow(10, $p++) +
// code_etape . version
($a->code_etape . $a->version <=> $b->code_etape . $b->version) * pow(10, $p++) +
);
});
Les dates
Le format par défaut
'Y-m-d\\TH:i:sP'
Exemple
$dateStr = '1979-09-05T11:27:04+02:00';
$date = DateTime::createFromFormat('Y-m-d\\TH:i:sP', $dateStr);
Débugging
var_dump() sur de longues variables
ini_set("xdebug.var_display_max_children", '-1');
ini_set("xdebug.var_display_max_data", '-1');
ini_set("xdebug.var_display_max_depth", '-1');
var_dump($var);
Divers
Installer Composer rapidement
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer