热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在PHP中的字符串比较条件的OO方式或功能方式-OOwayorfunctionalwayofstringcomparisonconditionalsinphp

Iamcurlingonaspecificpagethatreturnsonlyhtml.Todeterminewhatpageitreturns,Isimply

I am curling on a specific page that returns only html. To determine what page it returns, I simply try to stripos the result of the curl

我正在卷曲一个只返回html的特定页面。为了确定它返回的页面,我只是尝试去除curl的结果

Like so:

$result = curl_exec($ch);
if(stripos($result, 'success') !== false) {
    // do something
} else {
  if (stripos($result, 'foo') !== false) {
      // do something
  } else if (stripos($result, 'foo') !== false) {
      // do something
  } else if (stripos($result, 'bar') !== false) {
      // do something
  } else if (stripos($result, 'bazz') !== false) {
      // do something
  } else {
      // do something
  }
}

This is quite messy I think, is there an OO way or functional way to solve this kind of problem if I were looking at minimal if statements or ultimately an if-less code.

我认为这是非常混乱的,如果我正在查看最小的if语句或最终的if-less代码,是否有一种OO方式或功能方式来解决这类问题。

2 个解决方案

#1


What you are searching for a ways of abstraction. In this example you are repeating yourself in case analysis and this might be the best approach if the "do something" is very different and not consistent.

你正在寻找一种抽象方式。在这个例子中,你在案​​例分析中重复自己,如果“做某事”非常不同且不一致,这可能是最好的方法。

$map = [ 'success' => function () { return 1; }, 
         'foo'     => function () { return 2; }, 
         'bar'     => function () { return 3; }, 
         'bazz'    => function () { return 4; } ];
foreach ( $map as $search => $value )
{
  if (stripos($result, $search) !== false )
  {
    return call_user_func($value);
  }
}

In my example these could just have been constants and we could just return them instead of applying a function. In a functional pattern this would be like the function any in Scheme SRFI-1 except it returns it's true value:

在我的例子中,这些可能只是常量,我们可以返回它们而不是应用函数。在函数模式中,这将类似于Scheme SRFI-1中的函数,除了它返回它的真值:

// This function uses PHP 5.6 ellipsis
function array_any(callable $callable, ...$arrays) {
  if( count($arrays) == 1 ) {
      $args_zipped = array_map( function ($x) { return [$x]; }, $arrays[0]);
  } else {
      array_unshift( $arrays, null);
      $args_zipped = call_user_func_array( "array_map", $arrays);
  }
  foreach ( $args_zipped as $args ) {
    $result = call_user_func_array($callable, $args);
    if( $result !== false )
      return $result;
  }
  return false;
}

array_any( function ($search, $value) { 
               if ( stripos($result, $search) !== false )
                   return $value;
                   return false;
           },
           array_keys($map),
           array_values($map));

The function in itself uses linear update, but as you can see it works similar to array_map.

该函数本身使用线性更新,但正如您所见,它的工作方式类似于array_map。

#2


This simple function would do that work:

这个简单的功能可以做到这一点:

function checkWord ($haystack,$needle){
foreach ($needle as $word) {
    if (stripos($haystack, $word) !== false) {
        echo $word." was found!
"; } else{ echo $word." wasn't found
"; } } } checkWord("Hello what's up?",array('Hello','Huhud','up','?'));

This will output:-

这将输出: -

Hello was found!
Huhud wasn't found
up was found!
? was found!

推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有