我想知道在调用函数时是否可以确定当前命名空间是什么.我有这个函数声明:
<?php
namespace Site\Action;
function add ($hook, $function) {
/**
* determine the namespace this was called from because
* __NAMESPACE__ is "site\action" :(
*/
if (is_callable($function))
call_user_func($function);
}
?>
Run Code Online (Sandbox Code Playgroud)
在另一个文件上:
<?php
namespace Foo;
function bar () {
}
?>
Run Code Online (Sandbox Code Playgroud)
让我们说我把它作为我的程序代码:
<?php
namespace Foo;
Site\Action\add('hookname', 'bar');
?>
Run Code Online (Sandbox Code Playgroud)
假设Bar在这种情况下打算解决,Foo\bar因为那是从它调用的命名空间.
这是一个很长的解释,是否有可能确定Site\Action\add()调用的活动命名空间?
提前致谢.
我知道有几种方法可以在给定索引的情况下从字符串中获取字符.
<?php
$string = 'abcd';
echo $string[2];
echo $string{2};
echo substr($string, 2, 1);
?>
Run Code Online (Sandbox Code Playgroud)
我不知道是否有更多的方法,如果您知道任何方式请不要犹豫,添加它.问题是,如果我选择并重复上述方法几百万次,可能使用mt_rand来获取索引值,哪种方法在最小内存消耗和最快速度方面最有效?
我有一个用例,我需要计算很多集之间的相似性来创建一个简单的推荐引擎.我正在研究Jaccard系数和其他相似系数公式,但有一点在它们之间很常见:集合中的项目不能重复(如果我在这里错了,请纠正我).
我在PHP中编写了自己的函数来执行自定义哈希交集,其逻辑是:
arr1:一个数组,其中键是项的ID,值是它们对应的数量.这代表用户的愿望清单.arr2:是相同的,arr1但它代表另一个用户的库存.我需要一种非常快速的方式来交集集合,但是通常的相似系数公式涉及集合的交叉和并集,当比较一组与200k其他集合时,这可能没有我想要的那么快.这是我到目前为止的地方:
function my_similarity_coefficient ($arr1, $arr2) {
$matches = 0;
$total = 0;
if (count($arr2) == 0)
return 0;
foreach ($arr1 as $id => $qty) {
$total += $qty;
if (!array_key_exists($id, $arr2))
continue;
$matches += min($qty, $arr2[$id]); // do not match more than what user wants
}
return $matches / $total;
}
Run Code Online (Sandbox Code Playgroud)
我尝试在PHP中交叉两个带红色的哈希.在尺寸arr1[67]和arr2[231]分别.系数在未完成的61.98μsec(最差时高达266.075μsec)下计算.如果我试图从Redis获取数据到PHP,这个数字可以达到905.037μsec-3337.86μsec.
我想保持瓶颈不会将数据从redis传输到PHP,所以我想知道是否可以在lua(或者甚至是c ++)中编写这个自定义交集,如果可能的话,它是否会受到同样的影响瓶颈,因为它也从pointA到pointB获取它,或者它不会受到获取瓶颈,因为数据已经是本地的?
我不熟悉lua,但我不打算用精确的代码填充勺子.由于互联网上的lua资源与我实际想要实现的内容相关很少,我想在我搜索时首先选择一些大脑.
我知道这里有很多这样的错误,但这个查询似乎不同,因为它是一个插入查询。这是表 card_info 的架构:
CREATE TABLE card_info (
card_id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
card_name_orig varchar(150) NOT NULL,
card_name_html varchar(150) NOT NULL,
card_name_search varchar(150) NOT NULL,
card_name_page varchar(150) NOT NULL,
card_cost varchar(50) DEFAULT NULL,
card_cost_converted tinyint(2) NOT NULL DEFAULT '0',
card_subtype varchar(75) DEFAULT NULL,
card_oracle_text_orig text,
card_oracle_text_html text,
card_power varchar(10) DEFAULT NULL,
card_toughness varchar(10) DEFAULT NULL,
card_loyalty tinyint(1) DEFAULT NULL,
PRIMARY KEY (card_id),
KEY card_name_nd (card_name_search),
KEY card_name_page (card_name_page),
KEY card_cost_converted (card_cost_converted),
KEY card_power (card_power),
KEY card_toughness (card_toughness),
KEY card_loyalty (card_loyalty), …Run Code Online (Sandbox Code Playgroud)