2009-10-08 22 views
15

tengo el siguiente matriz principal llamado $mvalores recibiendo de matriz asociativa

Array 
(
    [0] => Array 
     (
      [home] => Home 
     ) 

    [1] => Array 
     (
      [contact_us] => Contact Us 
     ) 

    [2] => Array 
     (
      [about_us] => About Us 
     ) 

    [3] => Array 
     (
      [feedback_form] => Feedback Form 
     ) 

    [4] => Array 
     (
      [enquiry_form] => Products 
     ) 

    [5] => Array 
     (
      [gallery] => Gallery 
     ) 

) 

tengo los valores, por ejemplo, casa, contact_us en una matriz almacenada $ opciones, que necesito para obtener los valores de la matriz principal, llamada $ m usando la matriz $ options

por ejemplo. Si el array $ options tiene valor de la vivienda, que necesito para obtener el valor principal de la matriz principal ($ m)

mi código se ve de la siguiente manera

    $c = 0; 
        foreach($options as $o){ 
         echo $m[$c][$o]; 
         ++$c; 
        } 

de alguna manera simplemente no puede recibir los valores de la matriz principal?

Respuesta

18

Me transformo primera $m a un simple matriz con un solo nivel:

$new_m = array(); 
foreach ($m as $item) { 
    foreach ($item as $key => $value) { 
     $new_m[$key] = $value; 
    } 
} 

Entonces puede usar:

foreach ($options as $o) { 
    echo $new_m[$o]; 
} 
0

¿Cómo es esto?

foreach($options as $option) 
{ 
    foreach($m as $m_key => $m_value) 
    { 
    if($option == $m_key) 
    { 
     echo 'Name for ' . $options . ' is ' . $m_value; 
     break; 
    } 
    } 
} 
2

Prueba esto:

foreach($options as $o){ 
    foreach($m as $check){ 
     if(isset($check[$o])) echo $check[$o]; 
    } 
} 

aunque sería mejor tener la matriz llena las únicas las páginas y no una matriz multidimensional

0

¿Estás seguro de que la matriz de opciones está en el mismo orden de $ m? Tal vez usted

echo $m[$c][$o]; 

se está tornando en $ m [0] ['galería], que obviamente está vacío.

puedes probar con otras soluciones, para mí, una agradable (quizás no tan eficiente) debe ser como este:

for($c=0, $limit=count($c); $c < $limit; $c++) 
    if (array_search(key($m[$c]), $options)) 
    echo current($m[$c]); 

Si desea utilizar su enfoque han de aplanar su matriz con algo así como esto:

foreach ($m as $o) 
    $flattenedArray[key($o)]=current($o); 

foreach ($options as $o) 
    echo $flattenedArray($o); 

Hacer esto, sin embargo, elimina las voces duplicadas de su matriz original si existen tales duplicados.

0

Trate de usar una función array_walk recursivo, por ejemplo

$a = array(
     array('ooo'=>'yeah'), 
     array('bbb'=>'man') 
    ); 


function get_array_values($item, $key){ 
    if(!is_numeric($key)){ 
     echo "$item\n"; 
    } 
} 

array_walk_recursive($a,'get_array_values'); 
+0

Usted puede torcer de manera efectiva la función de crear lo que quieres de una estructura de matriz en forma de árbol. – clops

1

Suponiendo claves en las matrices sub son únicos que se pueden

  1. de combinación de todas las matrices sub en un único array utilizando call_user_func_array en array_merge
  2. intercambiar claves y valores de su matriz de opciones
  3. Use matriz_intersección_clave para recuperar una matriz con todos los valores.

Ejemplo de este modo:

$options = array('about_us', 'enquiry_form'); 

$values = array_intersect_key(
      call_user_func_array('array_merge', $m), // Merge all subarrays 
      array_flip($options)      // Make values in options keys 
     ); 

print_r($values); 

que se traduce en:

Array 
(
    [about_us] => About Us 
    [enquiry_form] => Products 
) 
0
$trails1 = array(); 
      foreach ($trails as $item) { 
       foreach ($item as $key => $value) { 
        $trails1[].= $value; 
       } 

      } 
      echo '<pre>';print_r($trails1); 
     exit;