【问题标题】:Multidimensional array - how to get specific values from sub-array多维数组 - 如何从子数组中获取特定值
【发布时间】:2011-06-12 07:17:41
【问题描述】:

我有以下数组结构:

大批 ( [0] => 数组 ( [product_option_id] => 236 [option_id] => 14 [名称] => Masura S [类型] => 选择 [option_value] => 数组 ( [0] => 数组 ( [product_option_value_id] => 33 [option_value_id] => 53 [名称] => 阿尔伯 [价格] => [价格前缀] => + ) [1] => 数组 ( [product_option_value_id] => 35 [option_value_id] => 55 [名称] => 罗苏 [价格] => [价格前缀] => + ) ) [必需] => 0 ) [1] => 数组 ( [product_option_id] => 237 [option_id] => 15 [名称] => 马苏拉 M [类型] => 选择 [option_value] => 数组 ( [0] => 数组 ( [product_option_value_id] => 34 [option_value_id] => 58 [名称] => 罗苏 [价格] => [价格前缀] => + ) ) [必需] => 0 ) )

我发现自己在尝试显示该数组中的所有 [name] 值时迷失了方向。

我要做的是使用基于第一级[name](如[name] => Masura S)的下拉选择填充表单,然后使用第二级[name](如[name] => Alb)填充第二个下拉选择.

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

【问题讨论】:

  • A union 查询在这两个表之间使用了类似的 name 字段,别名/自定义字段指示基于表源的级别,应该可以为您提供更好的格式数组。你有没有尝试过这样的事情?
  • 好吧 Bob,这超出了我的目标,我不想修改这个 MVC 的模型,目前使用提供的东西似乎是一个更好的选择。

标签: php multidimensional-array


【解决方案1】:

试试这个:

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

【讨论】:

  • 完美解决方案
【解决方案2】:

您可以这样填充第一个选择:

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

【讨论】:

  • 感谢Belonwu,这让我足够接近以弄清楚它现在可以按我的意愿工作!
  • 我对 Belonwu 提供的示例做了一些修改,在 jQuery 链接脚本的帮助下,我现在有了工作代码。我只需要修改这一行: $c2=count($options[$i]['option_value']);仅计算特定名称可用的选项,然后: 显示该名称的正确选项。谢谢!现在...整理我的其余代码:)
【解决方案3】:

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

$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,所以如果表单需要它们,则需要进一步扩展代码。

【讨论】:

  • 我会试着看看这能带给我什么 :) 谢谢!
【解决方案4】:

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

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

recursion($array);

【讨论】:

  • 如何从这个函数返回值?我想返回$value。我以这种方式修改了函数function recursion($array) { foreach ($array as $key =&gt; $value) { if($key==='sourceChannel'){ $getId = $value['id']; return $getId; } if (is_array($value)) recursion($value); } },但它总是返回空白!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 2014-12-12
  • 1970-01-01
  • 2017-07-09
相关资源
最近更新 更多