* 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 代码在线测试:

http://www.dooccn.com/php5.6/

 

关联博客:

https://blog.csdn.net/fareast_mzh/article/details/83508660