2

在这里我有一个问题:

我有两个数组,如下所示:

  $array1 = array('1','2','1','3','1');
  $array2 = array('1','2','3'); // Unique $array1 values

使用 array2 值,我需要 array1 的所有键

预期输出为:

 1 => 0,2,4
 2 => 1
 3 => 3

这里表示array2 value=>array1 keys

4

3 回答 3

10

只需使用一个循环:

$result = array();
foreach ($array1 as $index => $value) {
  $result[$value][] = $index;
}
于 2013-05-07T13:29:15.887 回答
1

如果您传递array_keys第二个参数,它将为您提供具有该值的所有键。

因此,只需循环$array2并从$array1.

$result = array();
foreach($array2 as $val){
    $result[$val] = array_keys($array1, $val);
}
于 2013-05-07T13:40:53.093 回答
1

以下代码将完成这项工作。它将创建一个结果数组,其中属性 val 将包含在数组中搜索的值,而 keys 属性将是一个包含找到的键的数组。根据您的价值观,以下是一个示例:

$array1 =array('1','2','1','3','1');
$array2 =array('1','2','3');

$results = array();

foreach ($array2 as $key2=>$val2) {
    $result = array();
    foreach ($array1 as $key1=>$val1 ) {
        if ($val2 == $val1) {
            array_push($result,$key1);  
        }
    }
    array_push($results,array("val"=>$val2,keys=>$result ));
}

 echo json_encode($results);

结果将是:

[{"val":"1","keys":[0,2,4]},
 {"val":"2","keys":[1]},
 {"val":"3","keys":[3]}]
于 2013-05-07T13:49:13.703 回答