php怎么搜索结果,PHP多维数组根据值搜索对应的键?
引言
我们讲解了很多种PHP数组操作的引用场景。今天我们接着分享这方面的知识,说一说对于多维数组,如何根据值搜索,并返回数组的索引值。
学习时间最开始我们习惯于跟随本能写代码,下意识地开始用 for 循环,对数组进行遍历,然后挨个比对,如果值相等,就返回索引值,如果没有匹配上,就是不存在。
假如原始数组是如下图一样的关联数组。
程序逻辑很简单,我们使用代码实现一下:
function searchForId($id, $array) { foreach ($array as $key => $val) { if ($val['uid'] === $id) { return $key; } } return null; }
这个函数接收一个值,与数组,如果匹配上就将数组的索引返回,如果不存在则返回 null。因为第一层结构没有手动指定索引值,所以默认是从0开始的数字索引。
使用起来是这样的:
$id = searchForId('100', $userdb);
执行结束后,输出应该为0。
当然了,上面写的函数具有通用性,对于特殊的案例,我们应该随机应变。对于上述 $userdb 关联数组的结构,显然,使用PHP内置的函数操作起来,更为直观和快捷。
我们只需要先把 uid 列的元素全部取出,因为上层结构是默认数字索引,所以此处不用手动指定索引值;然后,在提取的数组中搜索值,使用 array_search 执行返回键。
总结为代码,就一行:
$key = array_search('100', array_column($userdb, 'uid'));
执行结果跟上面的 searchForId 函数一致。
深入讨论上面的函数和第二个解决方法会有问题,就是仅仅返回了第一个匹配的键。像下面这样写,肯定问题不大:
$key = array_search(40489, array_column($userdb, 'uid'));
但是如果在数组中有重复的值,而 uid 列也不唯一,要把所有的匹配结果都返回,该怎么做呢?不会又要修改 searchForId 函数,重新倒腾?
其实大可不必,PHP提供了这样的功能,只需改用 array_keys 函数即可:
$keys = array_keys(array_column($userdb, 'uid'), 40489);
你肯定经常使用 array_keys 函数用于返回整个数组的键,但是它的第二个参数,恰恰是在指定时,拥有可搜索的功能。这确实有些冷门。
再进一步。
上面返回的是数组对应的键,那如果想要键和值一并关联返回,一行代码能搞定吗?可以的,修改一下就行了,使用 array_combine 函数将键和值组装起来返回:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
写在最后本文通过特定的数组搜索需求,延伸到手动造轮子,把特殊的特性推向一般,并使用PHP内置的数组处理函数,进行功能裁切,简洁而高效。善用数组函数是硬功夫。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
现在PHP还好找工作么?
对于是不是好找工作,我可以很直白的说,看你能力。你能力好,拿着简历去面试回答的问题十有八九,不愁没工作。学的不好,不能说找不到工作,找得到工作但是可能工资不会太高(当然这个说法也不能太绝对)。
对于找工作,可以自己去各大招聘网站去搜索PHP岗位,看搜索的结果有多少,再去看它们的招聘要求,就知道市场大概的需求大不大。
只要PHP开发的应用一直有,PHP工作就一直会存在。
最后,希望你能考虑清楚为什么想学PHP,而不是其他的编程语言或者其他的技能。因为关于程序员的故事你可能也听过,什么人傻钱多之类的。
找准方向就行,加油。
在郑州富士康招聘php工程师吗?
郑州富士康可能给大家的第一印象是大量的普工,其实不然,在智联招聘等招聘平台搜索富士康科技集团,会发现郑州富士康招大量的软件开发人员,至于php开发工程师,我搜索了一下,发现有这个需求,位于郑州航空港区的富士康对于php工程师有招聘需求。
职位月薪:5000-8000元/月 工作地点:郑州-航空港区 发布日期:招聘中 工作性质:全职 工作经验:1-3年 最低学历:大专 招聘人数:1人 职位类别:PHP开发工程师岗位职责:
1.负责项目整体规划、功能设计、程序开发工作;
2.负责项目开发与测试,维护已有程序的升级和错误更正;
3.负责项目完善及必要的二次开发;
4.负责开发设计项目新功能,协同完成项目升级工作;
5.配合产品经理规划项目开发进度,推进项目开发;
6.配合运营部门需求,提出技术解决方案并完成技术开发工作。
任职要求:
1.大专及以上学历,行销相关专业者;
2.有互联网金融行业者优先;
3.良好的开发能力和工作态度;
4.积极的工作态度和自我学习需求。
小程序如何从网络获得股票数据?
需要调用数据接口。
推荐使用新浪的数据接口是很简单的,本质上你只需要输入一个网址,你就会收到一个以文本形式发送的历史数据。
网址案例如下,读取m1905五分钟级别行情数据。
http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine5m?symbol=M1905
其他的内容不用改,只需要改两个网址参数,一个是5m(KLine5m),代表五分钟级别数据,这是最低频率,目前还没有1m数据。其他可选的诸如15m,30m,60m等等。第二个是M1905(symbol=M1905),即合约名称,需要大写。另外郑州的名称需要加一位年份,即获取TA905合约,要输入TA1905。
如果在浏览器中输入这个地址,你会得到一个文本信息如下。
文本由中括号和逗号分隔,放大看如下。
依次是行情时间,开盘价、最高价、最低价、收盘价、成交量。这是我在14:08分查询的结果的第一个数据,这里需要注意的是,这个数据标记的时间却是14:10。实际上,这个数据还在更新中,就和大家的行情软件看到的最新行情一样,行情发生变化,这个数据也会变化。除了最近的一个数据之外,其他的14:05,以及之前的数据,都已经确定,都不会再发生变化了。因此使用这个数据要小心,如果你把这个数据保存到本地,但是下次没有更新,这个数据就是错误的。
使用python读取新浪行情
用python读取新浪免费行情信息是比较简单的,只需要几行代码就可以实现了。
首先需要使用python的工具包requests,来访问网络信息。
这样,你就获得了一个文本数据,数据的内容和你在浏览器上看到的是一模一样的。实际上,你获得的数据的格式是json,具体是怎么回事不重要,感兴趣可以自己了解。在python里面,只需要一个现成的工具包,就可以解析。
这样你就将一个不好处理的文本数据,转变成了python好处理的数据形式。目前data的格式是由每个分钟行情list组成的一个大list。当然,我们更习惯用表格的形式来看行情,我们可以使用python的一个数据分析包来进一步处理。
然后,你就在程序中有自己的数据了。数据按时间降序排列,最前面的是最近的行情。
1.安装tushare,这个直接在cmd窗口输入命令“pip install tushare”就行,如下:
显示所有大图
2.安装完成后,我们还需要到tushare官网注册一下,获取一下token,后面的代码要用到,如下:
3.最后,我们就可以获取股票数据了,官网有详细的文档教程,主要包括日线行情、周线行情、月线行情、复权行情、停复牌信息、每日指标、复权因子等,下面我简单介绍一下:
获取股票日线行情数据,测试代码如下:
程序运行截图如下,包含有开盘价、最高价、最低价、收盘价、成交量等股票信息:
获取月线行情数据,测试代码如下:
程序运行截图如下,就是我们获取的那些股票月开盘价、收盘价、成交量等信息:
获取复权行情数据,测试代码如下:
程序运行截图如下,已经成功获取到复权行情数据:
获取每日指标数据,代码如下:
程序运行截图如下,已经成功获取到股票换手率、量比、市盈率、总股本、总市值等数据:
获取复权因子数据,代码如下:
已经成功获取到复权因子数据:
就介绍这么多吧,更多示例可以查看官方教程,很详细,后面也可以结合matplot和mpl_finance对获取的股票数据进行可视化,感兴趣的可以搜一下,网上有相关教程和资料,当然,你也可以利用相关软件或网站来获取股票数据,都可以,我这里就是提供一种思路,感兴趣的可以尝试一下,希望以上分享的内容能对你有所帮助吧。
怎么用搜索引擎在一个指定的网站中搜索一个词?
在使用谷歌搜索引擎的时候,可以使用:
site:限定搜索结果在某个域名或目录下,比如:网站优化 site:googlenb.com即为:搜索googlenb.com网站中包含网站优化的相关页面。 如果我们不加关键词通常返回的是这个网站收录的总条数,我们也可以搜索某个网站某个栏目收录了多少条,比如:site:googlenb.com/info/ 返回的即为改URL目录下的所有内容,目录限定仅支持谷歌。
当然谷歌还有其他的高级用法:
双引号 :把关键词放到双引号内,搜索引擎默认采用模糊匹配方式,会将词组进行拆分以及同义词分析,此时加上双引号可以强制进行完全匹配搜索。即:双引号内的内容必须完整并连续的出现。注意双引号必须为英文状态下输入。减号: 排除-号后面的内容,即我们在搜索某写内容时候,排除掉页面中内容中包含某些关键词的页面,比如搜索:网站优化服务 -郑州 ,即为:搜索提供网站优化服务的相关信息,但是又不想看郑州相关的。* 星号:可以充当通配符,意为任何字词或短语,比如搜索:北京*网络信息技术有限公司 ,即为搜索:北京某某网络信息技术有限公司,搜寻北京不同网络公司有限公司的名称。
() 小括号:将关键词包裹在括号内,一般与下方的OR、| 、AND 等一起使用,表示一个分组单元,控制搜索的执行方式。
OR 以及 | : 搜索两个或者多个关键词时候,出现某一个即可,比如搜索: (北京|上海) 网站优化工程师 ,即为:搜索北京或者上海招聘网站优化工程师的相关信息。
AND :与OR的区别在于 AND 相邻的关键词必须都出现在页面中。
filetype :将搜索结果限制为特定的文件类型。例如,PDF,DOCX,TXT,PPT等。比如: SEO filetype:pdf ,即为:搜索PDF格式的SEO相关文档。
intitle 以及 allintitle : 都表示在网页标题Title内搜索目标关键词,不同的是allintitle 后跟的所有关键词必须都出现在网页标题中,比如:intitle:后台登录 ,即为:搜索标题为后台登录的网址。
inurl 以及allinurl : 都表示在网页url地址内搜索目标关键词,不同的是allinurl 后跟的所有关键词必须都出现在网页URL中,比如:inurl:/admin/login.php ,即为:搜索后台登录的URL地址。
intext 以及allintext : 都表示在网页内容中搜索目标关键词,不同的是allintext 后跟的所有关键词必须都出现在网页内容中, 比如:intext:后台登录,即为:搜索网站内容中包含后台登录的页面。
AROUND(X) :邻近搜索。两个搜索关键词中间最多相邻X个词语,比如:郑州 AROUND(4) 网站优化 , 即为:搜索开头为郑州,中间有0到4个任意词语,后面紧跟网站优化的相关页面。
#..# :搜索一个数字区间,比如:互联网大会 2013..2018 ,即为:搜索互联网大会 2013年到2018年的相关信息。
inanchor 及 allinanchor :查找指定锚文本链接的页面。 比如:inanchor:点击这里 ,返回的结果其实为指向这些页面的锚文本是“点击这里” 。 allinanchor为后面跟地关键词完全出现在锚文本中。