php 处理数组

Posted 大郎,起来喝药了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 处理数组相关的知识,希望对你有一定的参考价值。

一、计算经纬度

function getDistance($lng1, $lat1, $lng2, $lat2)

    if (empty($lng1) || empty($lat1) || empty($lng2) || empty($lat2)) return '';

    $radLat1 = deg2rad($lat1);//deg2rad()函数将角度转换为弧度

    $radLat2 = deg2rad($lat2);

    $radLng1 = deg2rad($lng1);

    $radLng2 = deg2rad($lng2);

    $a = $radLat1 - $radLat2;

    $b = $radLng1 - $radLng2;

    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137;

    if ($s < 1) 
        $s = intval($s * 1000);
        $s .= 'm';
     else 
        $s = intval($s * 10) / 10;
        $s .= 'km';
    
    return $s;

二、手机号隐藏中间四位

function hide_phone($str)

    if (empty($str)) return '';
    return substr_replace($str, '****', 3, 4);

三、超过一万变成w

function priceToW($price)

    if ($price < 10000) return $price;

    return number_format($price / 10000, 2) . 'w';

四、根据某个字段排序

/**
 * 二维数组根据某个字段排序
 * @param array $array 要排序的数组
 * @param string $keys 要排序的键字段
 * @param string $sort 排序类型  SORT_ASC     SORT_DESC
 * @return array 排序后的数组
 */
function arraySort($array, $keys, $sort = SORT_DESC)

    $keysValue = [];
    foreach ($array as $k => $v) 
        $keysValue[$k] = $v[$keys];
    
    array_multisort($keysValue, $sort, $array);
    return $array;

五、保留两位小数

function sprintfPrice($price)

    if (empty($price)) return $price;

    return str_replace('.00', '', sprintf("%.2f", $price));

六、二维转字符串

/**
	 * Undocumented function
	 * 二维转字符串
	 * @param [type] $arr
	 * @return void
	 */
	function arr2str ($arr)
	
		foreach ($arr as $v)
		
			$v = join(",",$v); //可以用implode将一维数组转换为用逗号连接的字符串
			$temp[] = $v;
		
		$t="";
		foreach($temp as $v)
			$t.=$v.",";
		
		$t = substr($t,0,-1);
		
		return $t;
	

二维转一维,其中的值当key

$list = [
    0 => [
        'id' => 1001,
        'name' => '张三'
    ],
    1 => [
        'id' => 2091,
   		'name' => '李四'
    ]
];
现在需要将以上数据处理成为下列形式的一个一维数组:

$list = [
    1001 => '张三',
    2091 => '李四'
];
使用 php 内置函数一步到位:

array_combine(array_column($list, 'id'), array_column($list, 'name'));

数组分组

/**
     * @description:根据数据 
     * @param dataArr:需要分组的数据;keyStr:分组依据 
     * @return: array
     */
    protected function dataGroup(array $dataArr,$keyStr)
    
        $newArr=[];
        foreach ($dataArr as $k => $val)     //数据根据日期分组
            $newArr[$val[$keyStr]][] = $val;
        
        return $newArr;
    

    $list = array(
        array(
            'ctime'=>'2019-09-05 15:12:11',
            'openid'=>'1',
        ),
        array(
            'ctime'=>'2012-09-05 15:12:11',
            'openid'=>'2',
        ),
    );
    /** 1.根据时间分组*/
    $list=  $this->dataGroup($list,'ctime');
    /** 2.根据openid分组*/
    foreach($list as $k => $item)
        $list[$k]= $this->dataGroup($item,'openid');
    

    /**
        json $list
        
            2019-09-05 15:12:11:
                1:
                    'ctime':'2019-09-05 15:12:11',
                    'openid':'1', 
                
            ,
            2012-09-05 15:12:11:
                2:
                    'ctime':'2012-09-05 15:12:11',
                    'openid':'2', 
                
            
        
    **/

以上是关于php 处理数组的主要内容,如果未能解决你的问题,请参考以下文章

php中如果从一堆元素中随机出2个元素,举个例子:张三,李四,王五,刘六...有十个名字,

php数组常用函数总结

PHP 数组

PHP数组总结,,PHP面向对象思维思路。

PHP二维数组根据指定的值,获取指定的数组

PHP 二维数组根据某个字段排序