【问题标题】:How to get the intersection of two arrays by keys?如何通过键获得两个数组的交集?
【发布时间】:2016-03-23 21:33:53
【问题描述】:

我想将$_POST 中的某些值保存到文件中。但我只想要键在数组$lang 中的值。

举个例子:

$_POST = [1 => "a", 2 => "b", 3 => "c"];
$lang = [2, 3];

有了这个输入,我只想要来自$_POST 的值,其中键位于$lang 数组中。

预期的输出是:

[2 => "b", 3 => "c"]

现在我正在尝试使用 ArrayIteratorMultipleIterator 归档它,但这会循环通过两个数组:

$post = new ArrayIterator($_POST);
$lang_array = new ArrayIterator($lang); 
$it = new MultipleIterator;
$it->attachIterator($post);
$it->attachIterator($lang_array);
$fh = fopen('name.php', 'w');
foreach($it as $e) {
    fwrite($fh , $e[1] .'-' . $e[0] );
    fwrite($fh ,"\n" );   
}

所以我有点卡住了如何解决这个问题?

【问题讨论】:

  • 所以你想使用来自$lang 的值作为$_POST 的键?
  • 你能详细说明你需要什么吗?
  • @Rizier123 没有。来自 $_POST 的值作为 $lang 的键
  • @DonLaknath 不要把事情复杂化,直接做吧:print_r(array_intersect_key($_POST, array_flip($lang)));
  • @Rizier123 好样的,一点都不复杂!呵呵

标签: php arrays arrayiterator


【解决方案1】:

试试这个:

// Combining both arrays into one.
$combined_array = array_merge($_POST, $lang);
$fh = fopen('name.php', 'w');
foreach($combined_array as $key => $value){
    fwrite($fh , $key .'-' . $value );
    fwrite($fh ,"\n" );
}

【讨论】:

    【解决方案2】:

    两个数组组合请试试这个代码:-

    <?php
     $fname=array("Peter","Ben","Joe");
     $age=array("35","37","43");
     $c=array_combine($fname,$age);
      print_r($c);
    ?>
    

    和两个数组合并:-

    <?php
    $a1=array("red","green");
     $a2=array("blue","yellow");
    print_r(array_merge($a1,$a2));
    ?>
    

    这段代码对于两个数组的合并和合并很有用

    【讨论】:

      【解决方案3】:

      由于您希望通过键将两个数组相交,您可以使用array_intersect_key(),但由于键是$lang 中的值,您只需先使用array_flip() 翻转它,例如

      print_r(array_intersect_key($_POST, array_flip($lang)));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-06
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        相关资源
        最近更新 更多