una - recorrer un array multidimensional php
Obtenga el valor de índice de una matriz en PHP (10)
Tengo una matriz:
$list = array(''string1'', ''string2'', ''string3'');
Quiero obtener el índice para un valor dado (es decir, 1
para string2
2
y 2
para string3
)
Todo lo que quiero es la posición de las cadenas en la matriz
- string1 es 0
- string2 es 1
- string3 es 2
¿Cómo lograr esto?
¿Podrías ser un poco más específico?
$key = array_search(''string2'',$list)
funciona bien para mí ¿Estás tratando de lograr algo más complejo?
// o considerando su estructura de matriz:
$array = array(
''string1'' => array(''a'' => '''', ''b'' => '''', ''c'' => ''''),
''string2'' => array(''a'' => '''', ''b'' => '''', ''c'' => ''''),
''string3'' => array(''a'' => '''', ''b'' => '''', ''c'' => ''''),
);
// podrías simplemente
function findIndexOfKey($key_to_index,$array){
return array_search($key_to_index,array_keys($array));
}
// ejecutado
print "/r/n//-- Method 1 --///r/n";
print ''#index of: string1 = ''.findIndexofKey(''string1'',$array)."/r/n";
print ''#index of: string2 = ''.findIndexofKey(''string2'',$array)."/r/n";
print ''#index of: string3 = ''.findIndexofKey(''string3'',$array)."/r/n";
// alternativamente
print "/r/n//-- Method 2 --///r/n";
print ''#index of: string1 = ''.array_search(''string1'',array_keys($array))."/r/n";
print ''#index of: string2 = ''.array_search(''string2'',array_keys($array))."/r/n";
print ''#index of: string3 = ''.array_search(''string3'',array_keys($array))."/r/n";
// recursivamente
print "/r/n//-- Method 3 --///r/n";
foreach(array_keys($array) as $key => $value){
print ''#index of: ''.$value.'' = ''.$key."/r/n";
}
// salidas
//-- Method 1 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2
//-- Method 2 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2
//-- Method 3 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2
El problema es que no tienes un índice numérico en tu matriz.
Usar array_values () creará una matriz indexada cero que luego puede buscar utilizando array_search () omitiendo la necesidad de usar un ciclo for.
$list = array(''string1'', ''string2'', ''string3'');
$index = array_search(''string2'',array_values($list));
Este código debería hacer lo mismo que su nueva rutina, trabajando con la matriz multidimensional correcta.
$arr = array(
''string1'' => array(''a'' => '''', ''b'' => '''', ''c'' => ''''),
''string2'' => array(''a'' => '''', ''b'' => '''', ''c'' => ''''),
''string3'' => array(''a'' => '''', ''b'' => '''', ''c'' => '''')
);
echo ''Index of "string2" = ''. array_search(''string2'', array_keys($arr));
Otras personas han sugerido array_search()
que proporciona la clave del elemento de la matriz donde se encuentra el valor. Puede asegurarse de que las claves de matriz sean enteros contiguos utilizando array_values()
:
$list = array(0=>''string1'', ''foo''=>''string2'', 42=>''string3'');
$index = array_search(''string2'', array_values($list));
print "$index/n";
// result: 1
Usted dijo en su pregunta que array_search()
no tenía sentido. ¿Puedes explicar porque? ¿Qué intentaste y cómo no satisfizo tus necesidades?
Pruebe la función de PHP array_keys.
$key_string1 = array_keys($list, ''string1'');
Si solo está haciendo algunos de ellos (y / o el tamaño de la matriz es grande), entonces estaba en el camino correcto con array_search:
$list = array(''string1'', ''string2'', ''string3'');
$k = array_search(''string2'', $list); //$k = 1;
Si quieres todo (o muchos de ellos), un bucle te ayudará a mejorar:
foreach ($list as $key => $value) {
echo $value . " in " . $key . ", ";
}
// Prints "string1 in 0, string2 in 1, string3 in 2, "
array_search debería funcionar bien, acaba de probar esto y devuelve las claves como se esperaba:
$list = array(''string1'', ''string2'', ''string3'');
echo "Key = ".array_search(''string1'', $list);
echo " Key = ".array_search(''string2'', $list);
echo " Key = ".array_search(''string3'', $list);
O para el índice, podrías usar
$list = array(''string1'', ''string2'', ''string3'');
echo "Index = ".array_search(''string1'', array_merge($list));
echo " Index = ".array_search(''string2'', array_merge($list));
echo " Index = ".array_search(''string3'', array_merge($list));
array_search
es la forma de hacerlo.
De los docs :
$array = array(0 => ''blue'', 1 => ''red'', 2 => ''green'', 3 => ''red'');
$key = array_search(''green'', $array); // $key = 2;
$key = array_search(''red'', $array); // $key = 1;
Puede recorrer la matriz de forma manual y encontrar el índice, pero ¿por qué hacerlo cuando hay una función para eso? Esta función siempre devuelve una clave y funcionará bien con matrices asociativas y normales.
$find="Topsite";
$list=array("Tope","Ajayi","Topsite","Infotech");
$list_count=count($list);
sort($list);
for($i=0;$i<$list_count;$i++)
{
if($list[$i]==$find){
$position=$i;
}
}
echo $position;