2011-06-12 5 views
6

que tienen la siguiente estructura matriz:Conjunto multidimensional - cómo conseguir los valores específicos de la sub-serie

 
Array 
(
    [0] => Array 
     (
      [product_option_id] => 236 
      [option_id] => 14 
      [name] => Masura S 
      [type] => select 
      [option_value] => Array 
       (
        [0] => Array 
         (
          [product_option_value_id] => 33 
          [option_value_id] => 53 
          [name] => Alb 
          [price] => 
          [price_prefix] => + 
         ) 

        [1] => Array 
         (
          [product_option_value_id] => 35 
          [option_value_id] => 55 
          [name] => Rosu 
          [price] => 
          [price_prefix] => + 
         ) 

       ) 

      [required] => 0 
     ) 

    [1] => Array 
     (
      [product_option_id] => 237 
      [option_id] => 15 
      [name] => Masura M 
      [type] => select 
      [option_value] => Array 
       (
        [0] => Array 
         (
          [product_option_value_id] => 34 
          [option_value_id] => 58 
          [name] => Rosu 
          [price] => 
          [price_prefix] => + 
         ) 

       ) 

      [required] => 0 
     ) 
) 

me encuentro perdido en el intento de mostrar todos los valores de [nombre] en esta matriz.

Lo que estoy tratando de hacer es rellenar un formulario con desplegable selecciona basándose en el primer nivel de [name] (como [name] => Masura S) y luego un segundo desplegable seleccionar con el segundo nivel [name] (como [name] => Alb).

Le agradecería que si tiene alguna punteros ...

+0

¿Está utilizando PHP, correcto? –

+0

Sí, PHP, ¡estás en lo correcto! – RePho

+0

Una consulta 'union' que utiliza el campo' name' similar entre estas dos tablas, con un campo alias/personalizado que indica el nivel basado en el origen de la tabla, debe obtener una matriz mejor formada para trabajar. ¿Has probado algo así? –

Respuesta

7

puede instalar en la primera seleccione esta manera:

<select> 

    <?php $c=count($array); 
    for ($i=0; $i < $c; $i++) 
    { ?> 
     <option><?php echo $array[$i]['name'];?></option> 
    <?php } ?> 

</select> 

segundo selecto:

<select> 

    <?php 
    for ($i=0; $i < $c; $i++) 
    { 
     $c2=count($array[$i]); 
     for ($j=0;$j<$c2;$j++){ 
    ?> 
     <option><?php echo $array[$i][$j]['name'];?></option> 
    <?php }} ?> 

</select> 
+0

Gracias Belonwu, esto me tiene lo suficientemente cerca como para resolverlo, ¡ahora funciona como yo lo quiero! – RePho

+0

He hecho algunas modificaciones al ejemplo que Belonwu ha proporcionado, y con un poco de ayuda de una secuencia de comandos de encadenamiento jQuery ahora tengo el código de trabajo. Solo tuve que modificar esta línea: $ c2 = count ($ options [$ i] ['option_value']); para contar solo las opciones disponibles para un nombre específico y esto: Para mostrar las opciones correctas para ese nombre. Gracias! Ahora ... para resolver el resto de mi código :) – RePho

+0

bien, bienvenido, no olvide marcar como correcto –

4

Me separar los nombres para separar las matrices de este tipo, después de eso, debería ser fácil para poblar menús desplegables, según sea necesario:

$product_names = $option_names = array(); 
foreach ($products as $index => $product) { 
    $product_names[$index] = $product['name']; 

    foreach ($product['option_value'] as $option) { 
     $option_names[$index][] = $option['name']; 
    } 
} 

Cuando desee el nombre del producto para el índice de matriz 0, usará $ product_names [0] (una cadena) y los nombres de opción para ese producto se pueden encontrar desde $ option_names [0] (una matriz).

El código anterior no se preocupa por los ID existentes, por lo que si los necesita para el formulario, deberá expandir el código un poco más.

+0

Voy a tratar de ver dónde me llega esto :) ¡Gracias! – RePho

3

Usted tendrá que utilizar una función recursiva
He aquí un ejemplo

function recursion($array) { 
    foreach ($array as $key => $value) { 
     echo $value; 
     if (is_array($value)) 
      $this->recursion($value); 
    } 
} 

recursion($array); 
+1

¿cómo puedo devolver el valor de esta función? Quiero devolver el '$ valor'.He modificado la función de esta manera la función 'recursividad ($ array) { foreach ($ array como clave => valor de $ $) { si ($ key === 'sourceChannel') { \t \t \t \t $ = getId $ value ['id']; \t \t \t \t return $ getId; \t \t \t} \t \t si (is_array (valor $)) recursividad ($ value); \t \t} } '¡Pero siempre vuelve en blanco! – coderunner

2

Pruebe esto:

$name = array_column($array, 'name'); 
Cuestiones relacionadas