小编Mik*_*lRo的帖子

如何从字符串数组中以任何顺序匹配和突出显示所有术语?

要求是:

  • 从数组中查找字符串(从此处调用选项),其中包含所有条件的任意顺序
  • 正确地突出匹配的术语 - 即.前插入一个字符串,每个匹配项之后-我使用的是<u></u>这里
  • 搜索查询和选项都可以是"任何"

为简单起见,答案可以通过仅包含ASCII字符的列表集中于不区分大小写的搜索,并假设术语分隔符是普通空格 - 即.输入为"Foo bar baz"的查询表示搜索项['foo', 'bar', 'baz'].

澄清:

  • 所有术语必须在匹配选项中彼此分开存在 - 即.较短的术语不应仅作为较长术语的子串而不应存在两个术语重叠
  • 选项中必须存在重复的搜索项,其次数至少与查询中的次数相同

最终的应用程序(也许并不奇怪)是一种自动完成的.

TL; DR

最近的小提琴并排比较提出的算法:
https ://jsfiddle.net/Mikk3lRo/ndeuqn02/7/
(如果添加新算法,随时更新此链接)

jsPerf以更现实/更具代表性的方式比较算法 - 在每个代表上,一些字符串基本上"输入"一个字符:https:
//jsperf.com/comparison-of-algorithms-to-search-and-highlight

在这一点上,很清楚(由于trincot的优秀基础比较),原始实现所使用的大部分时间都花在了DOM输出上.它的重要性尽可能地在小提琴中被最小化.

还有,在每个搜索算法之间的性能有着明显的区别,但他们没有一个人是一直快速EST上的每个按键.在重新审视并清理我自己的"分而治之"之后,在我尝试的任何现实场景中,它的表现都优于其他人.

Tigregalis介绍了预运行优化的想法,这似乎是合理的,因为选项不太可能在击键之间改变.我在这里为所有方法添加了(一个函数).我从中看到一个明显的好处的唯一算法是在Skirtle的Permutations中,但我会鼓励每个回答者考虑它是否对他们自己的算法有用.

有些算法比其他算法更容易适应.我仍然认为这比实际实施中的微小性能差异更重要.

请注意,当前版本的Tigregalis'收缩集有一个错误 - 我已将其从小提琴和jsperf中排除,直到修复为止.


病毒排列

理论上,这可以通过"手动"构建一个RegExp来解决,该RegExp包含由捕获组分隔的搜索项的每个可能的排列,以捕获术语之间的任何内容 - 搜索"foo bar"结果(foo)(.*?)(bar)|(bar)(.*?)(foo).

然后突出显示一次通过string.replace().如果字符串中有任何更改,我们会匹配.

演示:

var options = ['United States', 'United Kingdom', 'Afghanistan', 'Aland Islands', 'Albania', 'Algeria', 'American Samoa', …
Run Code Online (Sandbox Code Playgroud)

javascript regex algorithm search highlighting

22
推荐指数
3
解决办法
1036
查看次数

尝试SOAP调用时,对象引用未设置为对象错误的实例

我正在尝试使用SOAP/wsdl连接到web服务并进行身份验证,但我经常收到错误:

<b>Fatal error</b>:  Uncaught SoapFault exception: [a:InternalServiceFault] Object reference not set to an instance of an object. in /path/install.php:16
Run Code Online (Sandbox Code Playgroud)

以下是我目前的代码:

<?php
header("Content-Type: text/plain"); 

$userinfo = array(
    'Username'=>'test',
    'Password'=>'test'
);

$wsdl_url = 'https://ws-e-distribution.kmd.dk/standard/ServiceAutorisation/ServiceAutorisation.svc?wsdl';
$client = new SoapClient($wsdl_url);

print_r($client->__getFunctions());
print_r($client->__getTypes());

//This is the problematic line:
$response = $client->__soapCall('LogOn', array('LogOn' => $userinfo));

var_dump($response);
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切可能的方法来包装我可以想到的用户名和密码参数,或者找到任何人建议:

  • 使用自定义类
  • 用一个 stdClass
  • 运用 SoapVar
  • 运用 SoapParam
  • 使用简单的数组
  • 双包裹数组
  • 以上很多组合.

我已经打过电话的功能等$client->__soapCall('LogOn', [milliontries]),以及$client->LogOn([milliontries])

......什么都行不通,请帮忙.

更新:

我终于设法得到一个不同的错误(这表明至少我遇到了一些稍微错误的东西).我的代码现在看起来像这样:

$response = $client->LogOn(array('logon' => array('Username' => 'test','Password' => 'test')));
Run Code Online (Sandbox Code Playgroud)

这给了我一个关于LogOnType …

php soap wsdl

4
推荐指数
1
解决办法
8477
查看次数

标签 统计

algorithm ×1

highlighting ×1

javascript ×1

php ×1

regex ×1

search ×1

soap ×1

wsdl ×1