首页 > 编程技术 > php

PHP合并两个数组简单方法

发布时间:2016-11-25 15:47

在php中合并数组的方法有很多,下面我来介绍最简单快速可实现数组合并的方法,有需要了解的朋友可参考。

数组合并array_merge

 代码如下 复制代码

$array1 = array(1=>'0');
$array2 = array(1=> "data");
$result3 = array_merge($array2,$array1);/*结果为$array2和$array1的值,键名被重新分配*/

还有一种办法直接使用“+”号

 代码如下 复制代码

a = array(
    'a',
);
$b = array(
    'u',
);
$c = $a + $b;
var_dump($c);
 
output:
array(1) {
  [0]=>
  string(1) "a"
}

数组的交集

这部分只介绍一些函数,至于用法是很简单的,不想多说,以免把简单的事情变得复杂了。

追加数组

array array_merge_recursive(array array1,array array2[…,array arrayN]) 

 代码如下 复制代码

<?php
$fruit1 = array("apple" => "red", "banana" => "yellow");
$fruit2 = array("pear" => "yellow", "apple" => "green");
$result = array_merge_recursive($fruit1, $fruit2);
print_r($result);

// output
// Array ( [apple] => Array ( [0] => red [1] => green ) [banana] => yellow [pear] => yellow )
?>

关联数组的差集Array_diff()这个不就介绍了

本文章给大家整一个php 多维数组的排序实现代码,我们在实际编码中将会用到PHP函数array_multisort()来实现这一复杂的排序,有需要了解的朋友可参考。

如数组

 代码如下 复制代码

Array
(
   [0] => Array
       (
           [id] => 1146
           [orderid] => 3
       )

   [1] => Array
       (
           [id] => 1149
           [orderid] => 2
       )

   [2] => Array
       (
           [id] => 170
           [orderid] => 4
       )

   [3] => Array
       (
           [id] => 1121
           [orderid] => 3
       )

   [4] => Array
       (
           [id] => 1120
           [orderid] => 7
       )

)

这么一个数据,想按orderid来排序。找不到内置的php函数,网上搜索了下,发现如下方法:

 代码如下 复制代码


$asc_func  =  create_function('$a,$b',' 
$k  =  "orderid";
if($a[$k]  ==  $b[$k])  return  0; 
return  $a[$k]>$b[$k]?1:-1; 
'); 
usort($arrs,$asc_func); 

$arrs是原数组,$k="orderid"是要排序的字段

后来对上面代码进行了升级

 代码如下 复制代码

function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
    if(!is_array($ArrayData))
    {
        return $ArrayData;
    }

    // Get args number.
    $ArgCount = func_num_args();

    // Get keys to sort by and put them to SortRule array.
    for($I = 1;$I < $ArgCount;$I ++)
    {
        $Arg = func_get_arg($I);
        if(!eregi("SORT",$Arg))
        {
            $KeyNameList[] = $Arg;
            $SortRule[]    = '$'.$Arg;
        }
        else
        {
            $SortRule[]    = $Arg;
        }
    }

    // Get the values according to the keys and put them to array.
    foreach($ArrayData AS $Key => $Info)
    {
        foreach($KeyNameList AS $KeyName)
        {
            ${$KeyName}[$Key] = $Info[$KeyName];
        }
    }

    // Create the eval string and eval it.
    $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
    eval ($EvalString);
    return $ArrayData;
}

在php中我们截取字符串可以使用自带的函数,但是自带的函数不支持中文截取,如果需要截取中文字符串我们需要现做一些操作,下面我来给各位朋友介绍。

针对GB2312的代码

 代码如下 复制代码

//$str是要截取的字符串
//$start是要截取的字符的开始位置
//$len是指要截取的字符长度
function sub_str($str, $start, $len) {
        $tmpstr = "";
        $strlen = $start + $len;
        for($i = 0; $i < $strlen; $i++) {
            if(ord(substr($str, $i, 1)) > 0xa0) {
                $tmpstr .= substr($str, $i, 2);
                $i++;
            } else
                $tmpstr .= substr($str, $i, 1);
        }
        return $tmpstr."...";
}

针对uft8

 代码如下 复制代码

<?php
//截取utf8字符串
function utf8substr($str, $from, $len)
{
    return preg_replace('#^(?:[x00-x7f]|[xc0-xff][x80-xbf]+){0,'.$from.'}'.
                       '((?:[x00-x7f]|[xc0-xff][x80-xbf]+){0,'.$len.'}).*#s',
                       '$1',$str);
}
?>

上面的方法肯定不实用,因为我希望可以自动识别支持任何编码的字符串截取,后来找到一个还算可以的分享给各位朋友。

 代码如下 复制代码

< ?php
/**
 * @package     BugFree
 * @version     $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
 *
 *
 * Return part of a string(Enhance the function substr())
 *
 * @author                  Chunsheng Wang <wwccss@263.net>
 * @param string  $String  the string to cut.
 * @param int     $Length  the length of returned string.
 * @param booble  $Append  whether append "...": false|true
 * @return string           the cutted string.
 */
function sysSubStr($String,$Length,$Append = false)
{
    if (strlen($String) < = $Length )
    {
        return $String;
    }
    else
    {
        $I = 0;
        while ($I < $Length)
        {
            $StringTMP = substr($String,$I,1);
            if ( ord($StringTMP) >=224 )
            {
                $StringTMP = substr($String,$I,3);
                $I = $I + 3;
            }
            elseif( ord($StringTMP) >=192 )
            {
                $StringTMP = substr($String,$I,2);
                $I = $I + 2;
            }
            else
            {
                $I = $I + 1;
            }
            $StringLast[] = $StringTMP;
        }
        $StringLast = implode("",$StringLast);
        if($Append)
        {
            $StringLast .= "...";
        }
        return $StringLast;
    }
}

$String = "www.111cn.net 走在中国自动化测试的前沿";
$Length = "18";
$Append = false;
echo sysSubStr($String,$Length,$Append);
?>

百度编辑器上传图片是保存的图片很是有问题,便全部保存在了upload目录下,这样的话图片一多就不好管理,下面我来告诉你修改UEditor图片上传路径方法。

找到ueditor/php目录下的getRemoteImage.php,

法一:将第12行的savePath" => "upload/" 修改为

 代码如下 复制代码

1 "savePath" => "upload/".date("Ymd")."/"

法二:将第80行

 代码如下 复制代码

1 $tmpName = $savePath . rand( 1 , 10000 ) . time() . strrchr( $imgUrl , '.' );

修改为

 代码如下 复制代码

1 $tmpName = $savePath . date("Ymd")."/".rand( 1 , 10000 ) . time() . strrchr( $imgUrl , '.' );

提示,上面生成的日期为20130407这样,如果想更详细我们可以

将第12行的savePath" => "upload/" 修改为

 代码如下 复制代码
1 "savePath" => "upload/".date("Y")."/.date("M")."/".date("Y");

这样更好管理

我们要处理的是判断一个远程服务器文件是否是存在,而不是自己本同服务器目录了,如果判断远程服务器的文件上否存在我们需要使用到curl_init,fsockopen,fopen方法,下面我来给大家举例说明。

fopen函数

fopen() 函数打开文件或者 URL。

如果打开失败,本函数返回 FALSE。

语法

fopen(filename)filename 规定要打开的文件或 URL。

从这个函数的说明来看是支持url的,代码如下

 代码如下 复制代码

<?php
    $url = 'http://www.xxx.com/images/test.jpg';
 
    if( @fopen( $url, 'r' ) )
    {
        echo 'File Exits';
    }
    else
    {
        echo 'File Do Not Exits';
    }
 ?>

这样的写个人很不推荐哦,因为它这们很是浪费服务器性能资源的。

curl函数
例子

 代码如下 复制代码
<?php
    $url2 = 'http://www.111cn.net/ test.jpg';
 
    $ch = curl_init();
    $timeout = 10;
    curl_setopt ($ch, CURLOPT_URL, $url2);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 
    $contents = curl_exec($ch);
    //echo $contents;
    if (preg_match("/404/", $contents)){
        echo '文件不存在';
    }
?>

小提示,不过此函数需我服务器开启才可用哦

推荐使用此方法哦,还有一种利用fsockopen 这种是专业的远程采集版了,

 代码如下 复制代码

 $url = "http://www.111cn.net /.gif";
 
    $info = parse_url($url);
    $fp = fsockopen($info['host'], 80,$errno, $errstr, 30);
    fputs($fp,"GET {$info['path']} HTTP/1.1rn");
    fputs($fp, "Host: {$info['host']}rn");
    fputs($fp, "Connection: closernrn");
    $headers = array();
    while(!feof($fp)) {
    $line = fgets($fp);
    if($line != "rn") {
    $headers[] = $line;
    }else {
    break;
    }
    }
 
    echo "<pre>";
    print_r($headers);

小提示,不过此函数需我服务器开启才可用哦

标签:[!--infotagslink--]

您可能感兴趣的文章: