问题:Array ( [0] => [1] => 3 2 [2] => 4 5 [3] => 3 4 [4] => 2 3 [5] => 1 2 )
我想检查数组当中是否存在两个数是相反的:比如3 2 和2 3
2 3 之间是空格隔开
自己写了一个简单的:
foreach($array as $value) { $v=explode(" ",$value); foreach($array as $num){ $m=explode(" ",$value); if($m[0]==$v[1]&&$m[1]==$v[0]){ return "get"; } } }
感觉用了两次foreach和explode,代码冗余,效率不高。
后来论坛发帖,有人这样写:
foreach($array as $value) { $v=explode(" ",$value); foreach($array as $num){ if(strcmp($value,strrev($num))==0){ return "get"; } } }
但还是两次foreach
后来又有人回帖:
foreach($ar as $v) { $t[] = join(' ', array_reverse(explode(' ', $v))); } print_r(array_intersect($ar, $t));
方法确实不错:
$tmp = array(); foreach($arr as $item) { $newItem = implode(' ', array_reverse(explode(' ', $item))); if(isset($tmp[$newItem])) { echo 'you get it!'; print_r($newItem); } $tmp[$item] = true; }