"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo buscar en una matriz asociativa PHP: consejos rápidos

Cómo buscar en una matriz asociativa PHP: consejos rápidos

Publicado el 2024-11-07
Navegar:292

Las matrices asociativas son una estructura de datos fundamental en PHP, que permite a los desarrolladores almacenar pares clave-valor. Son versátiles y se utilizan comúnmente para representar datos estructurados. La búsqueda de elementos específicos dentro de una matriz asociativa PHP es una tarea común. Pero la mayoría de las funciones nativas disponibles en PHP funcionan muy bien con matrices simples.

Por esta razón, a menudo tenemos que encontrar combinaciones de funciones que nos permitan hacer las mismas cosas en matrices asociativas. ¿Posiblemente sin errores de falta de memoria?.

En este tutorial, exploraremos varios métodos y técnicas para buscar valores en una matriz asociativa de PHP.

Buscando una clave en una matriz asociativa

La función array_key_exists() comprueba si existe una clave específica en una matriz asociativa. Devuelve verdadero si se encuentra la clave y falso en caso contrario.

$fruits = [
    'apple' => 'red',
    'banana' => 'yellow',
];

if (array_key_exists('banana', $fruits)) {
    echo "The key 'banana' exists in the array.";
} else {
    echo "The key 'banana' does not exist in the array.";
}

Búsqueda por valor en una matriz asociativa

Usando array_search() e in_array()

La función array_search() busca un valor en una matriz asociativa y devuelve la clave correspondiente si se encuentra, o falsa si no se encuentra.

$colors = [
    'apple' => 'red',
    'banana' => 'yellow',
];

echo array_search('yellow', $colors); // Print "banana"

También puedes usar arrays con datos más complejos como valor:

$colors = [
    'apple' => ['red'],
    'banana' => 'yellow',
];

echo array_search(['red'], $colors); // Print "apple"

En este caso te sugiero que utilices el modo de comparación estricta. Se puede solicitar pasando un tercer parámetro booleano a array_search:

echo array_search(['red'], $colors, true);

Similar a array_search() es la función in_array que simplemente devuelve un indicador booleano en lugar de la clave del elemento.

/*
 * It also supports strict mode comparison, useful for working with structured data as a value.
 */
echo in_array(['red'], $colors, true); // Return "true"

Usando un bucle foreach

Puede iterar a través de la matriz asociativa usando un bucle foreach y buscar manualmente un valor específico. Esto es útil cuando necesita realizar comparaciones o manipulaciones complejas porque el bucle se encuentra en el mismo ámbito de la matriz, por lo que tiene acceso a todos los datos del bucle.

$targetValue = 'yellow';

foreach ($colors as $key => $value) {
    if ($value === $targetValue) {
        echo "The value {$targetValue} is associated with the key {$key}.";
        break; // Optional: Stop searching after finding the occurrence.
    }
}

Usando array_filter()

La función array_filter() se puede utilizar para filtrar la matriz y devolver solo los elementos que pasan una devolución de llamada de prueba.

$colors = [
    'apple' => 'red',
    'banana' => 'yellow',
];

$filteredArray = array_filter($colors, function ($value) {
    return $value === 'red';
});

/*
 * It contains just one element: ['apple' => 'red']
 * ‘banana’ was filtered out.
 */
var_dump($filteredArray);

Puntos de referencia de rendimiento entre funciones de matriz PHP y foreach

Si el rendimiento es una de tus preocupaciones, seguro que esta sección del artículo te resultará interesante.

Hice un script para realizar una operación simple en una matriz de 200.000 elementos usando array_map y el bucle foreach. Utilicé el paquete Inspector para rastrear el rendimiento de las dos declaraciones. Puedes jugar con el código en este sandbox: https://phpsandbox.io/e/x/5titt

$data = range(1, 200000);

$inspector->addSegment(function () use ($data) {
    array_map(fn($item) => $item * 3, $data);
}, 'array_map');

$data = range(1, 200000);

$inspector->addSegment(function () use ($data) {
    foreach ($data as $item) {
        $data[$item] = $item * 3;
    }
}, 'foreach');

Docenas de ejecuciones muestran que foreach es consistentemente mejor que array_map en aproximadamente un 10%.

How to Search in a PHP Associative Array – Fast tips

Pero este resultado puede cambiar mucho según el entorno contextual. Si ejecuta el fragmento en el sandbox vinculado anteriormente, descubrirá que foreach es 10 veces más eficiente que array_map. Puede copiar el script en su entorno local y realizar algunos puntos de referencia usted mismo.

De todos modos, la razón por la que foreach es generalmente más eficiente que array_map es porque no implica el uso de una devolución de llamada. Hay más gastos generales al invocar una función en lugar de usar la matriz directamente en el mismo ámbito. Por esta razón, array_map pierde un poco más de tiempo con cada iteración. Pero sólo es visible para conjuntos de datos más grandes. Cuanto más pequeña es la matriz, más insignificante es la brecha.

¿Nuevo en el inspector? Supervise su aplicación de forma gratuita

Inspector es una herramienta de monitoreo de ejecución de código diseñada específicamente para desarrolladores de software. No necesita instalar nada a nivel de servidor, simplemente instale el paquete de compositor y estará listo para comenzar.

A diferencia de otras plataformas complejas todo en uno, Inspector es súper sencillo y compatible con PHP. Puedes probar nuestro paquete Laravel o Symfony.

Si busca una automatización eficaz, conocimientos profundos y la capacidad de reenviar alertas y notificaciones a su entorno de mensajería, pruebe Inspector de forma gratuita. Registre su cuenta.

O obtenga más información en el sitio web: https://inspector.dev

How to Search in a PHP Associative Array – Fast tips

Declaración de liberación Este artículo se reproduce en: https://dev.to/inspector/how-to-search-in-a-php-associative-array-fast-tips-26o6?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3