php查找数组元素各种方法总结,随手笔记
分类:微服架构

php实现正负数数组最大子序列,要求给出数组,该数组由正负数字组成,找出该数组中连续元素组成的子数组的最大值。
这其实得算是个背包变种吧。

一、用来遍历二维数组

对于一维数组我们可以如下操作

复制代码 代码如下:

for ($i = 0; $i < count($hno); $i++) {
  foreach($hno[$i] as $k =>$v){
    echo $v."<br/>";
  }
}

in_array  '函数在数组中搜索给定的值。in_array(value,array,type)type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

<?php
$list = array(1,-3,-5,-7,8,9,-11,5);

 

array_key_exists 'array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。array_key_exists(key,array)

$cur = 0;
$term = 0;
$res = 0;
$begin = 0;

二、从网上下载图片

array_search 'array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。array_search(value,array,strict)

foreach($list as $k => $v){
 $cur += $v;
 if($cur < 0){
  $cur = 0;
  $begin = $k + 1;
 }
 if($cur > $res){
  $res = $cur;
  $term = $k;
 }
}
$max_seq = array_slice($list, $begin, ($term - $begin) + 1);

$url='';

从这里来看,在数据量不大的时候,比如小于1000,查找用哪一种都行,都不会成为瓶颈;
当数据量比较大的时候,用array_key_exists比较合适。
当然这里array_key_exists占用的内存比较大,经测算

echo $res . ',';
print_r($max_seq);
//17,Array ( [0] => 8 [1] => 9 )

方法一、(最简单)
$filename = dirname(__FILE__)."/imgs/".date("Ymdhis").".jpg";
copy($url,$filename);

二分法查找数组是否包含某一元素,兼容正反序,代码实现:

方法二、
$fileName=dirname(__FILE__)."/imgs/".date("Ymdhis").".jpg";
getImage($url , $fileName );

 代码如下

function getImage($url , $fileName )
{
$ch = curl_init();
$fp = fopen($fileName, 'wb');

<?php

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);

$searchValue = (int)$_GET['key'];

curl_exec($ch);
curl_close($ch);
fclose($fp);
}

function search(array $array, $value)
{
$max = count($array)-1;
$min = 0;
$isAscSort = $array[$min] < $array[$max];

方法三、
$curl = curl_init($url);
$filename = dirname(__FILE__)."/imgs/".date("Ymdhis").".jpg";
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$imageData = curl_exec($curl);
curl_close($curl);
$tp = @fopen($filename, 'ab');
fwrite($tp, $imageData);
fclose($tp);

while (TRUE) {
$sum = $min+$max;
$midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2);

三、创建文件夹

if ($max < $min) {
return -1;
} else if ($value == $array[$midKey]) {
return 1;
} else if ($value > $array[$midKey]) {
$isAscSort ? $min = $midKey+1 : $max = $midKey-1;
} else if ($value < $array[$midKey]) {
$isAscSort ? $max = $midKey-1 : $min = $midKey+1;
}
}
}

$path_small="C:/myWorkspace/hotel_img/small/$no/";
if (!file_exists($path_big)) {
mkdir($path_big);
}

$array = array(
'4', '5', '7', '8', '9', '10', '11', '12'
);
// 正序
echo search($array, $searchValue);

四、以下代码可以遍历指定路径下的文件夹,找出数据库中的记录数与文件夹的差集
<?php
include_once 'db_conn.php';
$dir ="C:myWorkspacehotel_imgsmall";
$files1 = scandir($dir);

// 逆序
rsort($array);
echo search($array, $searchValue);

//echo count($files1);
//print_r($files1);exit();

例二

$sql="SELECT no FROM 0hotelone_img GROUP BY no";
$res=mysql_query($sql);
$temp=array();
while($row=mysql_fetch_assoc($res)){
$temp[]=$row;
}
//把二维数组转成一维数组
$list=array();
foreach ($temp as $no){
$list[]=$no[no];
}
//echo count($temp);
//print_r($list);exit();
//array_diff()返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值
print_r(array_diff ( $list , $files1 ));
?>

PHP 查找数组第i小元素

五、Unicode编码转换成汉字
$str='景观客房(一张特大床)';
echo unescape($str);exit();
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|&#x.{4};|&#d+;|.+/U",$str,$r);
$ar = $r[0];
//print_r($ar);
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
}
elseif(substr($v,0,3) == "&#x"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
}
elseif(substr($v,0,2) == "&#") {
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}

 代码如下

六、
复制下边的代码,粘贴到你网页中的任意位置,浮层将出现在你的网页中。
如果你的网站使用了模板,你也可以粘帖代码到模板中
<!-- Wenjuan Layer Begin -->
<div id="idy_floatdiv" style="position:fixed;right:0;top:250px;">
<a href="" target="blank">

<?php
     #随机选择第i小的数字,用随机快排实现
    
     #交换元素
     function swap(&$arr, $i, $j) {
         $temp = $arr[$i];
         $arr[$i] = $arr[$j];
         $arr[$j] = $temp;
     }
 
     #随机划分
     function randomized_partition(&$arr, $begin, $end) {
         $rand_inx = rand($begin, $end);
         swap($arr, $begin, $rand_inx);
         return partition($arr, $begin, $end);
     }
 
     #划分
     function partition(&$arr, $begin, $end) {
         #以第一个元素作为中枢元素
         $pivot = $begin;
         $low = $begin;
         $high = $end;
 
         while ($low < $high) {
             while ($low < $high && $arr[$low] <= $arr[$pivot]) {
                 $low++;
             }
 
             while ($low < $high && $arr[$high] >= $arr[$pivot]) {
                 $high--;
             }
 
             swap($arr, $low, $high);
         }
 
         #交换中枢元素
         if ($arr[$pivot] < $arr[$low]) {
             $low--;
         }
         swap($arr, $pivot, $low);
         return $low;
     }
 
     #快速排序,此处没用到
     function quick_sort(&$arr, $begin, $end) {
         $q = randomized_partition($arr, $begin, $end);
         if ($q > $begin) {
             quick_sort($arr, $begin, $q - 1);
         }
         if ($q < $end) {
             quick_sort($arr, $q + 1, $end);
         }
     }
 
     #选取第i小的数
     function randomized_select(&$arr, $begin, $end, $i) {
         if ($begin == $end) {
             return $arr[$begin];
         }
 
         $q = randomized_partition($arr, $begin, $end);
         $k = $q - $begin + 1; #k代表小于等于q的元素个数
 
         if ($k == $i) { #如果k=i,说明q就是第i小的元素坐标
             return $arr[$q];
         } else if ($i < $k) { #如果i<k,说明第i小的元素位于q的左边
             return randomized_select($arr, $begin, $q - 1, $i);
         } else { #第i小的元素位于q的右边,此时查找右边的第i-k小的元素
             return randomized_select($arr, $q + 1, $end, $i - $k);
         }
     }
 
     $arr = array(1, 5, 3, 7, 0, 0, 8, 4, 2, 9, 11);
     $t = randomized_select($arr, 0, count($arr) - 1, 8);
     print_r("The 8th minimum element: {$t}");
     echo "<br>";
     quick_sort($arr, 0, count($arr) - 1);
     print_r($arr);
 ?>

<img src="" />

</a>
</div>
<!-- Wenjuan Layer End -->

回到顶部的锚链接
<div id="idy_floatdiv" style="position:fixed;right:10px;top:500px;">
<a href="#">回<br/>到<br/>顶<br/>部</a>
</div>

七、continue  的用法

for($i=0;$i<21;$i++){
if(($i%2)== 0){
echo $i.' ';
continue;//表示循环继续执行,continue 后面的代码将不会执行
echo '/';
}
}

 

本文由10bet手机官网发布于微服架构,转载请注明出处:php查找数组元素各种方法总结,随手笔记

上一篇:php实现数组筛选奇数和偶数示例,php实现的树形结构数据存取类实例10bet手机官网: 下一篇:没有了
猜你喜欢
热门排行
精彩图文