php 字符串处理问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 字符串处理问题相关的知识,希望对你有一定的参考价值。
原字符
例子1:第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
例子2:第一$opda1254#第二$oplajmw1235
例子3:oplajmw1235
有以上三个类型字符串,需要提取出每个字符串$后面的opda1254进行二次处理,比如前后加个11,如果前面没有$,如最后一个 就直接前后加11
需要的字符
例子1:第一$11opda125411#第二$11oplajmw123511$$$第三$11oplajmw8541511#第四$11oplajmw166611
例子2:第一$11opda125411#第二$11oplajmw123511
例子3:11oplajmw123511
我的想法是先判断是否有$$$,有分割,然后在判断#,分割,在判断$,分割,然后取后面的值进行操作,但是技术不行。。。特来求救。
知道的朋友麻烦给个例子谢谢。
第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
$后面的字符可能是网址,也可能是某些字母+数字,也可能带一些特殊字符比如第四$oplajmw1666_op
比如例子1:第一$http://baidu.com/1/ad9.html#第二$oplajmw1235_cc$$$第三$oplajmw854_15#第四$oplajmw1666
我要匹配出$后面的字符 比如 http://baidu.com/1/ad9.html oplajmw1235_cc oplajmw854_15 oplajmw1666
然后对这个字符串进行加密,得出结果为
第一$wqdoasd#第二$jwodjqww$$$第三$awdiuhioa#第四$klnadw
现在加密是现成的,封装成函数,传递字符串返回加密结果字符串,但是问题是我不知道该怎么分割后处理每个字符串。
我的想法是先判断是否存在$$$,存在分割,然后在判断分割好的每个字符里是否包含#,包含在分割。然后判断是否包含$,不存在直接加密,存在分割取后面的字符,然后一一处理完成后得出上面的加密结果
首先有个函数explode(),当然你也可以自己写拆分函数
第一步,找$来拆分,如果子串等于1,那么两边直接加11,返回结果。如果子串大于1,那么进行第二步
第二步,重新处理这个字符串,这次找$opda1254来拆分,如果子串等于1,那么直接返回不处理,如果子串大于1,比如是2,那么原字符串大概是***+$opda1254+***,那么拼接时使用$11opda125411连接2个子串即可。
如果子串是多个,同第二步,只不过是原串***+$opda1254+***+$opda1254+***追问
比如例子1:第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
要匹配出$后面的字符 比如 opda1254 oplajmw1235 oplajmw85415 oplajmw1666
然后对这个字符串进行加密,得出结果为
第一$wqdoasd#第二$jwodjqww$$$第三$awdiuhioa#第四$klnadw
直接按$和#拆分就行了,$$$按照$拆分返回空字符串,只要返回结果不为空就可以加密了
直接按$和#拆分就行了,$$$按照$拆分返回空字符串,只要返回结果不为空就可以加密了
问题解决了吗
额 兄弟 能给个例子吗 ? 就是这里多个加密不会,我搞来搞去只能弄到一个。。
加密就写个自定义函数,比如str,传递匹配的字符,返回加密后的字符。
多谢!!!
正则匹配用([\w]+),自动把你要的字符,分成数组。要哪个,就用哪个。很方便。追问
随机数据,比如是
第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
需要对字符串处理后在还原成字符串,不改变位置
我不知道你随机出来什么。如果是一次一次随机的话。你可以把$和#去掉,不就是你要的字符串了嘛。
如果不是这样的话,你最好截个图上来看。
这么说吧 字符串不是固定的
有可能是 第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
也有可能是 第一$opda1254#第二$oplajmw1235
也有可能是 oplajmw1235
但是只有这三种类型
需要提取出每个字符串$后面的字符进行二次处理,比如前后加个11,如果前面没有$,如最后一个 就直接前后加11
就是我说的,用正则,可以匹配。只匹配字母数组即可!!!
单次匹配你看preg_match
多次匹配你看preg_match_all
比如例子1:第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
我要匹配出$后面的字符 比如 opda1254 oplajmw1235 oplajmw85415 oplajmw1666
然后对这个字符串进行加密,得出结果为
第一$wqdoasd#第二$jwodjqww$$$第三$awdiuhioa#第四$klnadw
你贴源码出来吧。你这样举例,我没看出你想要得到什么。
PHP 用字符串返回 false
【中文标题】PHP 用字符串返回 false【英文标题】:PHP return false with a string 【发布时间】:2011-12-04 05:58:44 【问题描述】:我正在寻找使用布尔/字符串处理返回语句的正确方法。例如,我在函数内部进行了所有检查,如果全部通过,则返回 true。但是,如果出现问题,我想返回一个错误字符串,而不仅仅是返回 false;带有一般字符串。如果 var 设置为 true 以外的任何值,php 是否会假定为 false?处理这个问题的正确方法是什么?这是我正在做的一个例子
<?php
$a = 2;
$result = CheckVar($a);
if ($result)
echo 'Correct!';
else
echo $result;
function CheckVar($var)
if ($var == 1)
return true;
else
return 'This is not the correct answer. You supplied '.$var;
?>
看来这个方法行得通,但是这是好的编程礼仪吗?还是我应该这样做的另一种方式?感谢您的宝贵时间。
【问题讨论】:
您需要了解 PHP(也适用于 JavaScript)中的 falsy 值。 ***.com/questions/699507/… @zzzzBov 异常是昂贵的。除非您有充分的理由,否则不要抛出异常。 @NullUserExceptionఠ_ఠ,不要过早优化。是的,使用许多例外可能代价高昂。 @zzzzBov 使用异常也会丑化你的代码。如果“答案不正确”,IMO 抛出异常是 no 有意义的。异常应该用于处理不符合预期的代码 - 因此名称为“异常”。你完全认为答案是错误的。 我会知道的。毕竟,我是Exception
:)
【参考方案1】:
如果 var 设置为除 true 以外的任何值,php 是否会假定为 false?
一点也不。 PHP 将返回变量设置的任何值。实际上,因为您有一个非空字符串,所以这是一个“真实”值(即:true
在布尔上下文中)。由于您使用if ($result)
作为检查并返回“真实”值,因此条件始终为真。您需要将该检查更改为:
if ($result === true)
...
处理这个问题的正确方法是什么?
我认为这是处理它的好方法。另一种方法是通过引用传递一个错误字符串变量,并让代码的失败部分填充它,例如:
function check($var, &$error)
if ($var == 1)
return true;
else
$error = 'This is not the correct answer. You supplied ' . $var;
return false;
一些原生 PHP 函数的行为是这样的(例如:exec()
。)另一种选择是返回一个包含错误的数组,就像 Jared 建议的那样。当我预计会出现多个错误(例如:表单验证例程)时,我个人会使用此选项:
function check_stuff($stuff)
$errors = array();
if (!$condition1)
$errors[] = 'Condition 1 failed';
if (!$condition2)
$errors[] = 'Condition 2 failed';
return $errors;
现在您还可以利用空数组是虚假的这一事实:
$errors = check_stuff($your_stuff);
if (!$errors)
echo 'No errors!';
else
print_r($errors);
【讨论】:
虽然我在过去一年中以不同的方式处理了这个问题,但在这种情况下,我可能想从函数返回一个错误数组,然后测试返回结果中它有多少个数组成员。这样,我不必维护两个不同的上下文(参数和返回值)。 @Jared 当我预计会出现多个错误(例如:表单验证器)时,我也会使用数组。【参考方案2】:您可以使用===
来检查返回值是否为布尔值true。 ===
检查类型和值。
if ($result === true)
echo 'Correct!';
else
echo $result;
【讨论】:
这很好用,尽管通过引用传递变量似乎是更好的实践标准。感谢您的帮助。【参考方案3】:我最近遇到了这个问题,我的函数要么将错误消息作为字符串返回,要么像这样返回 true:
function check_something()
if(condition)
return 'error message';
// if we got this far all is good!
return true;
我会这样调用它并检查结果:
$var = check_something();
if($var !== true)
// $var is not boolean true, so it must be a string
echo $var;
这会检查函数的结果是否不仅仅是一个真字符串,而是一个明确的布尔真
【讨论】:
【参考方案4】:这对于返回 true 或返回 false 作为字符串的人可能很有用。
if (is_bool($result))
echo 'Result is a true bool';
else
echo $result.'returning a string';
【讨论】:
以上是关于php 字符串处理问题的主要内容,如果未能解决你的问题,请参考以下文章