【问题标题】:array_intersect for sub arraysarray_intersect 用于子数组
【发布时间】:2014-01-16 09:27:43
【问题描述】:

我有一个这样的关联数组。

$lang['lbl_mylabel1'] = array('key1' => 'value1');
$lang['lbl_mylabel2'] = array('key2' => 'value1');
$lang['lbl_mylabel3'] = array('key3' => 'value1');
$lang['lbl_mylabel4'] = array('key4' => 'value2');
$lang['lbl_mylabel5'] = array('key5' => 'value3');

我有一个名为value1 的变量,我想通过它比较子数组的值并返回所有值为value1 的元素。

那么我怎样才能使用array_intersect 或任何可能的有效方法将$lang array 的元素与values1 返回给我。

上面代码的答案应该是$lang array中的前3个元素。

【问题讨论】:

    标签: php arrays array-intersect


    【解决方案1】:

    我猜你的意思是:

    $result = array();
    $value1 = 'value1';
    foreach($lang['lbl_mylabel1'] as $la)
    {
       if(in_array($value1)) 
       {
          $result[] = $la;
       }
    }
    

    【讨论】:

    • $lang 数组包含大约 600 个元素,所以我试图避免在它上面出现循环。我想将一个值与分配给 $lang 数组的 sub-array 中的项目的值进行比较。
    【解决方案2】:

    以下代码将保留原始 $lang 数组的结构:

    $find = 'value1';
    $result = array_filter($lang, function($rec) use ($find) {
        return in_array($find, $rec);
    });
    

    $result 将在哪里:

    array (
      'lbl_mylabel1' => 
      array (
        'key1' => 'value1',
      ),
      'lbl_mylabel2' => 
      array (
        'key2' => 'value1',
      ),
      'lbl_mylabel3' => 
      array (
        'key3' => 'value1',
      ),
    )
    

    【讨论】:

    • 优秀,谢尔盖 thnx。实际上,我更关注的是使用内置函数,而不是自己循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2011-08-04
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2021-03-01
    • 2021-05-29
    相关资源
    最近更新 更多