2010-02-01 7 views
5

Estoy tratando de encontrar valores dentro de una matriz. Esta matriz siempre comienza con 0. desafortunadamente array_search comienza a buscar con el elemento de matriz 1. Así que el primer elemento siempre se pasa por alto.Problema en la búsqueda de matrices

¿Cómo podría "cambiar" esta matriz para comenzar con 1, o hacer que la búsqueda de matriz comience con 0? La matriz proviene de un servicio web XML, por lo que no puedo modificar los resultados.

+0

Tal vez debería mostrar su código y cómo busca porque obviamente 'array_search' funciona correctamente. Pero tal vez no sea la función correcta para su propósito. –

Respuesta

2

Consulte el manual, que podría ayudarle a: http://www.php.net/manual/en/function.array-search.php

Si lo que estás tratando de hacer es aumentar el uso de la clave a uno, que puede hacer:

function my_array_search($needle, $haystack, $strict=false) { 
    $key = array_search($needle, $haystack, $strict); 
    if (is_integer($key)) $key++; 
    return $key; 
} 
my_array_search($xml_service_array); 
+0

hmm thanx, pero ¿puede explicar más porque utilicé cero pero no funcionaba? ¿array_search() comienza en la tecla 0? –

+1

Asegúrese de que la clave de índice sea Cero, observe lo que meagar dijo como un ejemplo – Ghazanfari

+0

Este ejemplo técnicamente resolverá su problema, pero la clave resultante apuntará 1 más allá del elemento que desea buscar. Sin embargo, aún encontrarás el elemento 0. Por lo tanto, la clave que devuelve en realidad no le indicará dónde encontrar los datos. – meagar

13

array_search hace no empieza a buscar en el índice 1. Prueba este ejemplo:

<?php 
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); 
$key = array_search('blue', $array); // $key = 0 
?> 

Cualquiera que sea el problema que s con su código, no es que su primer elemento sea el índice 0.

Es más probable que esté usando == en lugar de === para verificar el valor de retorno. Si array_search devuelve 0, lo que indica el primer elemento, el siguiente código no funcionará:

// doesn't work when element 0 is matched! 
if (false == array_search(...)) { ... } 

En su lugar, necesidad cheque utilizando ===, que compara tanto valor y el tipo

// works, even when element 0 is matched 
if (false === array_search(...)) { ... } 
+0

wow thanx amigo que fue increíble, creo que descubrí el problema. –

+0

Como se dice en esta gran caja roja ** de advertencia ** en este sitio: http://php.net/manual/en/function.array-search.php ¡Leer páginas de manual a veces realmente ayuda! –

Cuestiones relacionadas