我想检查多维数组中的值是否与给定的百分比相同。
例如,这是我的数组:
$shop = array( array( Title => "rose",
Price => 1.25,
Number => 15
),
array( Title => "daisy",
Price => 0.75,
Number => 25,
),
array( Title => "orchid",
Price => 1.15,
Number => 7
)
);
并且如果给定值(比如“testorchid”)与多维数组中的值相同55%。返回多维数组中相应的值和相同的过程。
所以在这种情况下。如果我检查“testorchid”,它返回“兰花”和55.56诉讼。 有点像similar_text():工作
我有一个函数可以检查给定值(needle)是否与多维数组中的值相同:
function in_array_r($needle, $haystack, $strict = true) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}
但它只在值完全相同时才返回true。不是多维数组中的对应值,而不是相同值的百分比。
我想说这样的话:如果“orchidtest”是> 60%与多维数组中的[“title”]相同,然后将该值赋予百分比。
答案 0 :(得分:1)
<?php
$shop = array(
array(
'Title' => "rose",
'Price' => 1.25,
'Number' => 15
),
array(
'Title' => "daisy",
'Price' => 0.75,
'Number' => 25,
),
array(
'Title' => "orchid",
'Price' => 1.15,
'Number' => 7
)
);
function find_similar($compare, $array, $threshold = 0)
{
$return = array();
$score;
foreach ($array as $k => $v)
{
similar_text($compare, $v['Title'], $score);
if ($score >= $threshold)
{
$return[] = array(
'compared' => $compare,
'title' => $v['Title'],
'score' => number_format($score, 2)
);
}
}
usort($return, function ($a, $b)
{
if((double)$a['score'] == (double)$b['score'])
{
return 0;
}
return ($a['score'] < $b['score']) ? 1 : -1;
});
return $return;
}
$similar = find_similar('testorchid', $shop, 14);
?>
为您提供一个排序最相似的数组$similar
,您可以指定一个阈值来切断无用的值。
print_r($similar)
的输出:
Array
(
[0] => Array
(
[compared] => testorchid
[title] => orchid
[score] => 75.00
)
[1] => Array
(
[compared] => testorchid
[title] => rose
[score] => 14.29
)
)
请注意,雏菊尚未返回,因为它的相似性低于阈值。作为参考,它的相似性是13.3333333r