103 lines
2.1 KiB
PHP
Executable File
103 lines
2.1 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* mb_stripos all occurences
|
|
* based on http://www.php.net/manual/en/function.strpos.php#87061
|
|
*
|
|
* Find all occurrences of a needle in a haystack
|
|
*
|
|
* @param string $haystack
|
|
* @param string $needle
|
|
* @return array or false
|
|
*/
|
|
function mb_stripos_all($haystack, $needle) {
|
|
|
|
$s = 0;
|
|
$i = 0;
|
|
|
|
while(is_integer($i)) {
|
|
|
|
$i = mb_stripos($haystack, $needle, $s);
|
|
|
|
if(is_integer($i)) {
|
|
$aStrPos[] = $i;
|
|
$s = $i + mb_strlen($needle);
|
|
}
|
|
}
|
|
|
|
if(isset($aStrPos)) {
|
|
return $aStrPos;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Apply highlight to row label
|
|
*
|
|
* @param string $a_json json data
|
|
* @param array $parts strings to search
|
|
* @return array
|
|
*/
|
|
function apply_highlight($a_json, $parts) {
|
|
|
|
$p = count($parts);
|
|
$rows = count($a_json);
|
|
|
|
for($row = 0; $row < $rows; $row++) {
|
|
|
|
$label = $a_json[$row]["label"];
|
|
$a_label_match = array();
|
|
|
|
for($i = 0; $i < $p; $i++) {
|
|
|
|
$part_len = mb_strlen($parts[$i]);
|
|
$a_match_start = mb_stripos_all($label, $parts[$i]);
|
|
|
|
foreach($a_match_start as $part_pos) {
|
|
|
|
$overlap = false;
|
|
foreach($a_label_match as $pos => $len) {
|
|
if($part_pos - $pos >= 0 && $part_pos - $pos < $len) {
|
|
$overlap = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!$overlap) {
|
|
$a_label_match[$part_pos] = $part_len;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(count($a_label_match) > 0) {
|
|
ksort($a_label_match);
|
|
|
|
$label_highlight = '';
|
|
$start = 0;
|
|
$label_len = mb_strlen($label);
|
|
|
|
foreach($a_label_match as $pos => $len) {
|
|
if($pos - $start > 0) {
|
|
$no_highlight = mb_substr($label, $start, $pos - $start);
|
|
$label_highlight .= $no_highlight;
|
|
}
|
|
$highlight = '<span class="hl_results">' . mb_substr($label, $pos, $len) . '</span>';
|
|
$label_highlight .= $highlight;
|
|
$start = $pos + $len;
|
|
}
|
|
|
|
if($label_len - $start > 0) {
|
|
$no_highlight = mb_substr($label, $start);
|
|
$label_highlight .= $no_highlight;
|
|
}
|
|
|
|
$a_json[$row]["label"] = $label_highlight;
|
|
}
|
|
|
|
}
|
|
|
|
return $a_json;
|
|
|
|
}
|
|
?>
|