Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中查找数组元素之间的相似性(而不是重复)?_Php_Arrays - Fatal编程技术网

在PHP中查找数组元素之间的相似性(而不是重复)?

在PHP中查找数组元素之间的相似性(而不是重复)?,php,arrays,Php,Arrays,我正在寻找一种在PHP中查找数组中的相似性(而不是实际的重复项)的方法,以便获得“更大的图像”。本质上,我是在特定Instagram帖子上抓取标签,然后寻找它们之间的相关性和标签关系数据库 目前我有一个数组,看起来像: array(15) { ["vietnam"]=> int(1617) ["vietnamtravel"]=> int(788) ["vietnamnow"]=> int(736) ["travelphotography"]=>

我正在寻找一种在PHP中查找数组中的相似性(而不是实际的重复项)的方法,以便获得“更大的图像”。本质上,我是在特定Instagram帖子上抓取标签,然后寻找它们之间的相关性和标签关系数据库

目前我有一个数组,看起来像:

array(15) {
  ["vietnam"]=>
  int(1617)
  ["vietnamtravel"]=>
  int(788)
  ["vietnamnow"]=>
  int(736)
  ["travelphotography"]=>
  int(583)
  ["visitvietnam"]=>
  int(540)
  ["hanoihandbook"]=>
  int(514)
  ["travel"]=>
  int(505)
  ["travelblogger"]=>
  int(491)
  ["vietnamtrip"]=>
  int(468)
  ["bestintravel"]=>
  int(462)
  ["sunsetporn"]=>
  int(460)
  ["instavietnam"]=>
  int(460)
  ["sky_sultans"]=>
  int(453)
  ["ig_sunsetshots"]=>
  int(423)
  ["traveller"]=>
  int(406)
}
其中int()表示相关性

我试图实现的是从中提取主要关键字,以获得包含“越南”、“旅行”、“摄影”、“日落”等内容的数组

蛮力的方法是将数组的每个元素与数组的其余部分进行比较,看看能找到多少次?这对于“越南”和“旅行”来说效果很好,因为它们已经在阵列中了。然而,它不能让我提取“日落”或“摄影”的例子

有什么想法吗?:)

谢谢


如果您需要在(PHP函数)中使用此关键字标记标记,请使用下一个代码:

echo "length of data array = ".count($data_ar)."\r\n";
$keys_like = ["vietnam","travel","sunset","photography"];

function new_arr ($keys, $data){
    $res = [];

    foreach($data as $key => $val){
        foreach($keys as $k){ 
                if(stristr($key, $k)){
                    $res[$key] = $data[$key];
                }  
        }
    }

    return $res;
}

$res_arr = new_arr($keys_like, $data_ar);
echo "length of resultant array = ".count($res_arr)."\r\n";
print_r($res_arr);
在这里,您可以通过
$keys\u like
选择所需的

借助@RakeshJakhar'函数,您可以在
$data array
中看到最大出现次数:

function _parseRecursive(&$array, &$carry){
    array_filter($array);
    $first = array_shift($array);
    $array = array_map(function($v) use ($first){
        return str_replace($first, '', $v);
    }, $array);
    $carry[] = $first;
    if(!$array) 
        return array_filter($carry);
    return _parseRecursive($array, $carry);
}  

function new_arr ($data, $rec_keys){
    $res = [];

    foreach($rec_keys as $item){
        $res[$item] = 0;
        foreach($data as $key => $val){ 
            if(stristr($key, $item)){
                $res[$item] += 1;
            }   
        }
    }
    return $res;
}

$data_keys = [];
foreach($data_ar as $key=>$val){
    $data_keys[] = $key;
}

$rec_arr = _parseRecursive($data_keys, $res);

$res_arr = new_arr($data_ar, $rec_arr); 
arsort($res_arr);
print_r($res_arr);

我认为这对你有帮助,如果没有,请忽略它

<?php
$whitelist = ["home","dashboard","profile","group"];
$possibleUserInputs = ["homd","hom","ashboard","settings","group"];
foreach($possibleUserInputs as  $input)
{
 if(preg_grep("/$input/i",$whitelist)
{
     echo $input." whitelisted";
}else{
     echo $input." flawed";
}

} 
?>

这可能会有所帮助,您可以从第一个数组元素开始解析数组

function _parseRecursive(&$array, &$carry){
  array_filter($array);
  $first = array_shift($array);
  $array = array_map(function($v) use ($first){
    return str_replace($first, '', $v);
  }, $array);
  $carry[] = $first;
  if(!$array) 
     return array_filter($carry);
  return _parseRecursive($array, $carry);
}
像这样使用它

 $result = _parseRecursive($a, $res);

工作示例:

您希望得到什么结果?我期待一个包含“越南”、“旅游”、“摄影”和“日落”的数组。“我试图从中提取主要关键字”-然后提供这些关键字的完整列表,或者解释你想如何确定“主要关键字”实际上是什么。这就是问题所在,我不知道这些主要关键字是什么。我正在寻找数组中的相关性,这些相关性将指向数组的主题是什么。在这个数组中,单词“travel”和“Vietname”经常会弹出,因此可以安全地假设它们是数组中所有内容的主题。问题是,我需要输入我想要的结果。结果应该是$keys_like,而不是输入。我无法提前知道结果会是什么。