2011-06-12 81 views
6

得到具体数值我有以下阵列结构:多维数组 - 如何从子阵列

 
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 
     ) 
) 

,我发现自己在试图显示所有的[名]从这个数组的值丢失。

我所试图做的是填充下拉表单基于第一级[name](如[name] => Masura S),然后第二个下拉与第二级[name](如[name] => Alb)选择选择。

,如果您有任何指针我将不胜感激......

+0

您正在使用PHP,正确吗? – 2011-06-12 07:18:57

+0

是的,PHP,你是对的! – RePho 2011-06-12 07:20:30

+0

在这两个表之间使用类似'name'字段的'union'查询应该为您提供一个更好的形成数组来处理,其中一个别名/自定义字段指示基于表源的级别。你尝试过那样的事吗? – 2011-06-12 07:35:24

回答

7

可以填充第一选择这种方式:

<select> 

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

</select> 

第二选择:

<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

谢谢Belonwu,这让我足够接近,弄清楚了,它现在可以按照我的需要工作! – RePho 2011-06-12 07:59:02

+0

我对Belonwu提供的示例进行了一些修改,并从jQuery链接脚本中获得了一些帮助,现在我已获得工作代码。我只需要修改 这一行:$ c2 = count($ options [$ i] ['option_value']); 只计算可用于特定名称的选项 ,并且比这更多:<?php echo $ options [$ i] ['option_value'] [$ j] ['name'];?>显示正确的选项名称。 谢谢!现在...整理出我的其他代码:) – RePho 2011-06-12 08:10:54

+0

好吧欢迎,dnt忘记标记为正确 – 2011-06-12 08:11:05

4

我单独分开这样的数组名称,之后根据需要它应该很容易填充下拉列表:

$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']; 
    } 
} 

如果您希望数组索引为0的产品名称,您可以使用$ product_names [0](一个字符串),并且可以从$ option_names [0](数组)中找到该产品的选项名称。

上面的代码并不关心现有的ID,所以如果你需要他们的形式,你需要扩大代码。

+0

我会试着去看看这让我感动:)谢谢! – RePho 2011-06-12 08:16:47

3

您需要使用递归函数
这里是一个例子

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

recursion($array); 
+1

我该如何返回此函数的值?我想返回'$ value'。我在这种方式'函数递归($阵列){ 的foreach($数组作为$密钥=> $值){ 如果修改的功能($键=== 'sourceChannel'){ \t \t \t \t $的getId = $值[ 'ID']; \t \t \t \t return $ getId; \t \t \t} \t \t如果(is_array($值)) 递归($值); \t \t} }'但它总是返回空白! – coderunner 2013-06-05 06:47:20

2

试试这个:

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