我在PHP中有一个关联数组,想要从中选择一个随机键/值对.这是我到目前为止所拥有的:
初始化.
$locations = array();
Run Code Online (Sandbox Code Playgroud)
循环访问SQL查询并添加键/值对:
array_push($locations, "'$location_id' => '$location_name'");
Run Code Online (Sandbox Code Playgroud)
稍后,我选择数组的随机索引:
$rand = array_rand($locations);
Run Code Online (Sandbox Code Playgroud)
兰德只是一个数字.所以位置[$ rand]给了我类似的东西:
'1' => 'Location 1'
Run Code Online (Sandbox Code Playgroud)
好的,一个assoc数组元素.此时,我不知道这个assoc数组的关键,所以我尝试了以下几点:
foreach($locations[$rand] as $loc_id => $location_name) {
echo "$key : $value<br/>\n";
}
$loc_id, $location_name = each($locations[$rand]);
$location_name = $locations[key($rand)];
Run Code Online (Sandbox Code Playgroud)
这3次尝试都不起作用.他们都抛出错误,如"传递的变量不是一个数组".
我确信有一些简单的1衬里可以从阵列中提取随机键/值对.或者我的语法已关闭.我非常感谢你的帮助.
有没有办法在没有无限循环的情况下做到这一点?
while((my $var) = $string =~ /regexline(.+?)end/g) {
print $var;
}
Run Code Online (Sandbox Code Playgroud)
这导致无限循环,可能是因为直接从while内的正则表达式中分配var每次都返回"true"?
我知道我可以这样做:
while($string =~ /regexline(.+?)end/g) {
my $var = $1;
print $var;
}
Run Code Online (Sandbox Code Playgroud)
但我希望我能省下一条线.有没有我可以使用的正则表达式修饰符或类似的东西?
(另外,如果我想搜索它,这个符号/技巧实际上是什么?
(my $var) = $string =~ /regex/;
Run Code Online (Sandbox Code Playgroud)
谢谢!!
所以我的Perl脚本基本上是一个字符串然后尝试通过多次搜索并替换它来清理它,如下所示:
$text =~ s/<[^>]+>/ /g;
$text =~ s/\s+/ /g;
$text =~ s/[\(\{\[]\d+[\(\{\[]/ /g;
$text =~ s/\s+[<>]+\s+/\. /g;
$text =~ s/\s+/ /g;
$text =~ s/\.*\s*[\*|\#]+\s*([A-Z\"])/\. $1/g; # replace . **** Begin or . #### Begin or ) *The
$text =~ s/\.\s*\([^\)]*\) ([A-Z])/\. $1/g; # . (blah blah) S... => . S...
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我正在处理令人讨厌的HTML,并且必须将其击败.
我希望有一种更简单,美观的方式来做到这一点.我有大约50行看起来就像上面那样.
我通过使用哈希来解决了这个问题的一个版本,其中键是注释,哈希是reg表达式,如下所示:
%rxcheck = (
'time of day'=>'\d+:\d+',
'starts with capital letters then a capital word'=>'^([A-Z]+\s)+[A-Z][a-z]',
'ends with a single capital letter'=>'\b[A-Z]\.'
}
Run Code Online (Sandbox Code Playgroud)
这就是我使用它的方式:
foreach my $key (keys %rxcheck) …Run Code Online (Sandbox Code Playgroud) 这是我遇到的一个古怪的问题(可能以前见过但从未注意过).
这是代码的要点:
my $url = 'http://twitter.com/' . $handle;
my $page = get($url);
if($page =~ m/Web<\/span>\s*<a href=\"(.+?)\"/gi) {
$website = $1;
}
if($page =~ m/follower_count\" class=\"stats_count numeric\">(.+?)\s*</g) {
$num_followers = $1;
}
Run Code Online (Sandbox Code Playgroud)
它获得了一个Twitter网址,并使用一些正则表达式来捕获关注者和用户的网站.这段代码实际上运行正常.但是当您在搜索关注者之后切换订单并搜索网站时,网站会显示空白.事实证明,当你正则表达一个字符串时,似乎有点保存最后一个匹配的位置.在html中,网站显示后会显示关注者数量.如果您首先执行跟随者计数正则表达式,就像它启动网站正则表达式,其中跟随者计数停止(如对字符串的索引引用).
令我感到困惑的是,我最后有"g"运算符,表示"全局",如"从全局搜索字符串......".
我在这里错过了什么吗?我似乎无法弄清楚为什么它恢复字符串上的最后一个正则表达式位置(如果这是有道理的).
这是我的查询:
select word_id, count(sentence_id)
from sentence_word
group by word_id
having count(sentence_id) > 100;
Run Code Online (Sandbox Code Playgroud)
表语句包含3个字段,wordid,sentenceid和主键id.它有350k +行.这个查询花了85秒钟,我想知道(希望,祈祷?)有一种更快的方法来找到所有超过100个句子的单词.
我已经尝试取出选择计数部分,只是做'有计数(1)',但都没有加快速度.
我很感激您可以借出的任何帮助.谢谢!