1

我想检查多维数组中的值是否与给定百分比相同。

例如这是我的数组:

$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%。返回多维数组中对应的值和相同的procent。

所以在这种情况下。如果我检查“testorchid”,它会返回“orchid”和 55.56 procent。有点像similar_text(): 工作

我有一个函数可以检查给定值(针)是否与多维数组中的值相同:

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”与多维数组中的 [“title”] 相同 > 60%,则将该值以百分比表示。

4

1 回答 1

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
        )

)

请注意,daisy 尚未返回,因为它的相似性低于阈值。作为参考,它的相似性是 13.3333333r

于 2012-12-07T12:42:30.103 回答