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