如何比较忽略最后4个字符的两个数组第二个数组中的变量


How do I compare two arrays ignoring the last 4 characters the variables in the 2nd array?

我试图比较两个数组,但忽略了第二个数组中的最后四个字符,这是两个数组:

$a1 =array("Maths Foundation","Maths Higher","English Foundation","English Higher","English Lit Foundation","English Lit Higher");
$a2 = array("Maths Foundation 2015","Maths Higher 2014","English Foundation 2015","English Lit Higher 2014");

我希望$a2查看$a1,并将匹配的主题替换为",将不匹配的主题替代为"。所以结果看起来是这样的:

$a3 = array("Maths Foundation 2015","Maths Higher 2014","English Foundation 2015"," ","English Lit Higher 2014");

因此,3美元将用""取代缺失的"英国文学基金会"

////////////////////////////////////////////////////////////////////////////////////////////////////

我想我已经接近了,这是我到目前为止的代码:

$a1=array("Maths Foundation","Maths Higher","English Foundation","English Higher","English Lit Foundation","English Lit Higher");
$subjects = array("Maths Foundation 2015","Maths Higher 2014","English Foundation 2015","English Lit Higher 2014");
$subject = array();
$subjectyr = array();
foreach ($subjects as $v){
$yr = substr($v, -4);
$subb = substr($v, 0, -5);
$subject[] = ''.$subb.'';
$subjectyr[] = ''.$subb.' '.$yr.'';

$a3 = $a1;
$results = array_keys(array_diff($a1, $subjectyr));
foreach ($results as $result)
$a3[$result] = '';
}
$a4 = array_replace($a3,$subjectyr);
$string1 = implode(", ",$a4);
echo $string1;

/////////////////////编辑////////

我决定尝试另一种策略,它越来越近了,但还没有达到:

$a1=array("Maths Foundation","Maths Higher","English Foundation","English Higher","English Lit Foundation","English Lit Higher");
$a2 = array("Maths Foundation 2015","Maths Higher 2014","English Foundation 2015","English Lit Higher 2014");
foreach ($a1 as $a11){foreach ($a2 as $a22){
$a3 = substr($a22, 0, -5);
if ($a3 == $a11){
$thing[] = $a22;
}
else {
$thing[] = "";
}}}
print_r ($thing);
$a1 =array("Maths Foundation","Maths Higher","English Foundation","English Higher","English Lit Foundation","English Lit Higher");
$a2 = array("Maths Foundation 2015","Maths Higher 2014","English Foundation 2015","English Lit Higher 2014");
$temp = array();
$out = array();
foreach($a2 as $element)
    $temp[substr($element, 0, -5)]=$element;
foreach($a1 as $element)
    $out[]=isset($temp[$element])? $temp[$element] : ' ';
var_dump($out);

输出:

array(6) {
  [0]=>
  string(21) "Maths Foundation 2015"
  [1]=>
  string(17) "Maths Higher 2014"
  [2]=>
  string(23) "English Foundation 2015"
  [3]=>
  string(1) " "
  [4]=>
  string(1) " "
  [5]=>
  string(23) "English Lit Higher 2014"
}

http://codepad.viper-7.com/pDmoZd

这应该适用于您:

<?php
    $a1 =array("Maths Foundation","Maths Higher","English Foundation","English Higher","English Lit Foundation","English Lit Higher");
    $a2 = array("Maths Foundation 2015","Maths Higher 2014","English Foundation 2015","English Lit Higher 2014");
    $a3 = array();
    foreach($a2 as $k1 => $v1) {
        foreach($a1 as $k2 => $v2) {
            if (substr($a2[$k1], 0, -5) == $a1[$k2]) {
                $a3[] = $a2[$k1];
                break;
            } elseif (count($a1) == ($k2+2))
                $a3[] = "  ";
        }
    }
    var_dump($a3);
?>

输出:

array(5) {
    [0]=>
    string(21) "Maths Foundation 2015"
    [1]=>
    string(17) "Maths Higher 2014"
    [2]=>
    string(23) "English Foundation 2015"
    [3]=>
    string(2) "  "
    [4]=>
    string(23) "English Lit Higher 2014"
}

试试这个:

$found = 0;
foreach ($a1 as $key => $value) {
    $found = 0;
    foreach ($subjects as $k => $v) {
        if ($value == $substr($v, 0, -5)) {
            array_push($subject, $v);
            $found = 1;
            break;
        }
    }
    if ($found == 0) {
        array_push($subject, "");
    }
}