从关联数组中获取值

时间:2009-10-08 10:07:40

标签: php arrays

我有以下主要数组$m

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
        )

)

我有值存储$ options的数组中的home,contact_us,我需要使用$ options数组从主数组中获取$ m的值

例如。如果$ options数组的值为home,我需要从主数组中获取值Home($ m)

我的代码如下所示

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

我以某种方式无法从主数组中接收值?

7 个答案:

答案 0 :(得分:22)

我首先将$m转换为只有一个级别的简单数组:

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

然后你可以使用:

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

答案 1 :(得分:2)

试试这个:

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

尽管让数组填充唯一的页面而不是多维数组会更好

答案 2 :(得分:1)

假设子阵列中的键是唯一的,您可以

  1. 使用array_merge上的call_user_func_array将所有子数组合并为一个数组
  2. 交换选项数组的键和值
  3. 使用array_intersect_key检索包含所有值的数组。
  4. 示例如下:

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

    导致:

    Array
    (
        [about_us] => About Us
        [enquiry_form] => Products
    )
    

答案 3 :(得分:0)

这是怎么回事?

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

答案 4 :(得分:0)

你确定options数组的顺序是$ m吗?也许你是你的

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

正在解析为$ m [0] ['gallery'],这显然是空的。

你可以尝试不同的解决方案,对我来说,一个不错的解决方案(也许效率不高)应该是这样的:

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

如果你想使用你的方法必须用这样的东西压扁你的阵列:

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

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

但是,如果存在重复的话,这样可以消除原始数组的重复声音。

答案 5 :(得分:0)

尝试使用递归array_walk函数,例如

$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');

答案 6 :(得分:0)

$trails1 = array();
          foreach ($trails as $item) {
              foreach ($item as $key => $value) {
                  $trails1[].= $value;
              }

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