1

我有一个由(a)描述,(b)最小年数和(c)最大年数组成的多维数组:

$years_array = array( 
 array("Any", 0, 255),
 array("New", 0, 1),
 array("5 - 10yrs", 5, 10),
 array("10 - 20yrs", 10, 20)
);

给定最小$min和最大$max年数,我如何匹配它以给出$description数组中的描述?

例子:

$min = 5, $max = 10 => $description = "5 - 10yrs";
4

4 回答 4

1
function match_desc($arr,$min,$max) { 
    // first filter an array to match $min and $max
    $filtered = array_filter($arr, function($v) use ($min,$max) { 
        list($desc,$miny,$maxy) = $v; 
        return $min == $miny && $max == $maxy; 
    });
    // return only descriptions
    return array_map(function($v) { return $v[0]; },$filtered);
}

match_desc(array( 
 array("Any", 0, 255),
 array("New", 0, 1),
 array("5 - 10yrs", 5, 10),
 array("10 - 20yrs", 10, 20)
), 0,1);

将返回array(0 => "New");

这个函数认为你可能有一个像

$years_array = array( 
 array("Desc1", 0, 255),
 array("Desc2", 0, 255),
);

因此,return array(0 => "Desc1", 1 => "Desc2"); 如果函数与传递的 min 和 max 不匹配,则将 0 和 255 作为 min 和 max 输入,它将返回一个空数组,并且可以很容易地用empty.

于 2012-08-17T06:33:10.743 回答
1

尝试这样的事情:

function getDescription($min,$max) 
{
  // source
  $years_array = array( 
    array("Any", 0, 255),
    array("New", 0, 1),
    array("5 - 10yrs", 5, 10),
    array("10 - 20yrs", 10, 20)
  );
  foreach ($years_array as $yearRecord) {
    if ($min == $yearRecord[1] && $max == $yearRecord[2])) {
      return $yearRecord[0];
    }
  }
  return false;
}

getDescription(0, 255); // == "Any"
于 2012-08-17T06:30:44.153 回答
1
function searchArray($min, $max, $years_array)
{
  foreach($years_array as $years)
  {
    if($years[1] == $min && $years[2] == $max) return $years[0];
  }
}
于 2012-08-17T06:30:56.077 回答
1

快速,肮脏,只是为了展示一种可能性......

<?php
$years_array = array( 
 array("Any", 0, 255),
 array("New", 0, 1),
 array("5 - 10yrs", 5, 10),
 array("10 - 20yrs", 10, 20)
);

function getYearDescription(&$years, $min, $max) {
 foreach($years as $year) {
  if($year[1] == $min && $year[2] == $max) {
    return $year[0];
  }
 }

 return "n/a";
}

echo(getYearDescription($years_array, 5, 10));
?>

我想你需要一个完全匹配

于 2012-08-17T06:31:06.420 回答