// segredos da linguagem

3 usos desconhecidos do null em PHP

funções nativas escondidas dentro da sua própria stdlib
01
"array_zip" nativo
combinando arrays elemento a elemento
objetivo array_zip
objetivo.php
$numbers = [1, 2];
$letters = ['a', 'b', 'c'];

array_zip($numbers, $letters);
// [[1, 'a'], [2, 'b'], [null, 'c']]
jeito manual array_zip
manual.php
function array_zip(array ...$arrays): array
{
    if (empty($arrays)) {
        return [];
    }

    $minLength = min(array_map('count', $arrays));
    $result = [];

    for ($i = 0; $i < $minLength; $i++) {
        $tuple = [];
        foreach ($arrays as $array) {
            $tuple[] = $array[$i];
        }
        $result[] = $tuple;
    }

    return $result;
}
com null array_zip
elegante.php
function array_zip(...$arrays): array
{
    return array_map(null, ...$arrays);
}
passar null como callback faz o array_map agrupar os arrays em tuplas, em vez de transformá-los
02
"array_compact" nativo
removendo valores vazios de um array
objetivo array_compact
objetivo.php
$items = [1, 2, 3, null, false, '', 0, []];

array_compact($items);
// [1, 2, 3]
jeito manual array_compact
manual.php
function array_compact(array $array): array
{
    return array_filter(
        $array,
        fn ($item) => !empty($item)
    );
}
com null array_compact
com_null.php
function array_compact(array $array): array
{
    return array_filter($array, null);
}
simplificado array_compact
final.php
function array_compact(array $array): array
{
    return array_filter($array);
}
sem callback, o segundo argumento de array_filter já é null por padrão
03
array numérico → associativo
indexando uma lista pela própria chave
objetivo as_assoc
objetivo.php
$people = [
    ['id' => 1, 'name' => 'Alan'],
    ['id' => 2, 'name' => 'Bia'],
    ['id' => 3, 'name' => 'Carlos'],
];

as_assoc($people, 'id');
// [
//   1 => ['id' => 1, 'name' => 'Alan'],
//   2 => ['id' => 2, 'name' => 'Bia'],
//   3 => ['id' => 3, 'name' => 'Carlos'],
// ]
jeito manual as_assoc
manual.php
$hashed = [];

foreach ($people as $person) {
    $hashed[$person['id']] = $person;
}
com null as_assoc
elegante.php
function as_assoc(array $list, string|int $key): array
{
    return array_column($list, null, $key);
}

as_assoc($people, 'id');
passar null como coluna de valor mantém a linha inteira, usando apenas a chave para indexar
fim./null
3 truques. um único null.
array_map · array_filter · array_column