* version.php
<?php
echo "PHP version: ". phpversion().PHP_EOL;
$boughtSubjects = array('wuli', 'huaxue');
$all = array('yuwen', 'shuxue', 'yingyu', 'wuli', 'huaxue', 'shengwu');
$a = array_intersect($all, $boughtSubjects);
var_dump(json_encode($a));
$subjects = array();
foreach ($a as $key => $value) {
$subjects[] = $value;
}
var_dump(json_encode($subjects));
$ php version.php
PHP version: 7.2.8
string(25) "{"3":"wuli","4":"huaxue"}"
string(17) "["wuli","huaxue"]"
http://php.net/manual/en/function.array-intersect.php
希望返回数组,结果是对象. 可以通过array_values转换
http://php.net/manual/en/function.array-values.php
* intersect.php
<?php
class Arr {
public static function filter(array &$a, callable $c) {
for ($i = 0; $i < count($a);) {
if (call_user_func($c, $a[$i]) ) {
$i++;
} else {
self::unset($a, $i);
}
}
}
private static function unset(array& $arr, $i) {
if ($i<0 || $i > count($arr)) {
return;
}
for ($j = $i+1; $j < count($arr); $i++, $j++) {
$arr[$i] = $arr[$j];
}
unset($arr[$i]);
}
}
$b = array('其他', 'wuli', 'unknown', 'huaxue', '物理', '化学');
$all = array('yuwen', 'shuxue', 'yingyu', 'wuli', 'huaxue', 'shengwu');
// $a = array_filter($b, function($e) use ($all) {
// return in_array($e, $all);
// });
$a = array_map(function($e) {return $e;}, $b); // $a = $b;
Arr::filter($a, function($e) use ($all) {
return in_array($e, $all);
});
echo json_encode($a).PHP_EOL;
* test:
$ php intersect.php
["wuli","huaxue"]
php 代码在线测试:
关联博客:
https://blog.csdn.net/fareast_mzh/article/details/83508660