Lo que intentas hacer con los arrays en lo mismo que con las variables, por ejemplo..
// Tienes la variable $n;
$n;
// La ponemos un valor;
$n = 1;
// La ponemos un segundo valor;
$n = 3;
// Mostramos $n por pantalla;
echo $n;
Resultado.
N vale 3.
¿Qué ha pasado con el 1? Digamos que lo has sobreescrito y este ha dejado de existir, lo mismo con el array, al tener 3 "TX" 'sobrescribiste' los dos primeros.
Te pronpongo lo siguiete;
<?php
$ciudad = "TX"; // Definimos lo que buscamos.
foreach(array("NY"=>8.008278,"CA"=>3.694820,"IL"=>2.896016, "TX"=>1.953631,"PA"=>1.517550,"AZ"=>1.321045,
"MI"=>951270) as $clave1=>$valor1){
// Si $clave1 es igual que lo definido en la variable '$ciudad', almacena el dato correspondiete en la variable $d1;
if ($clave1 === $ciudad){$d1 = $valor1;}}
// Si $clave2 es igual que lo definido en la variable '$ciudad', almacena el dato correspondiete en la variable $d2;
foreach(array("CA"=>1.223400,"TX"=>1.188580) as $clave2=>$valor2){ if ($clave2 === $ciudad){$d2 = $valor2;}}
// Si $clave3 es igual que lo definido en la variable '$ciudad', almacena el dato correspondiete en la variable $d3;
foreach (array("TX"=>1.144464) as $clave3=>$valor3) { if ($clave3 === $ciudad){$d3 = $valor3;}}
/* La @ es para omitiar el mensaje de error que te saldrá si alguna variable no está definida
si lo prefieres puedes cambiarlo y usar empty o isset */
$result = @$d1+@$d2+@$d3;
// Mostramos el resultado.
echo $result;
?>
El código es muy cutre, y se podría optomizar...
Lo de los '@' como ya metí en la anotación, sirven para omitir los errores que PHP tire, si por ejemplo, solo te interesa PA, pa no existe en el tercer array, entonces la variable $d3, no estará definida, y tendrá un valor NULL, entonces PHP ejecutará el código a la perfección, pero te avisará de que $d3 no está definida, con la '@' delante de la variable, PHP no jode con el aviso.
También puedes usar las funciones isset y empty para comprobar si éstas están definidas. A mí me dio pereza
Espero que te sirva (que yo creo que sí)...
Un saludo!