二维数组排序,指定一维数组为条件

本文介绍了一个PHP函数,用于根据特定条件对多维数组进行排序。该函数接受三个参数:待排序的数组、排序条件数组及排序依据的字段,并返回排序后的数组。文章通过示例展示了如何使用此函数。
<?php
$whereArr = [
'张三',
'李四',
'王五'
];

$dataArr = [
[
'name' => '哈哈',
'sex' => '男'
],
[
'name' => '李四',
'sex' => '男'
],
[
'name' => '王五',
'sex' => '男'
],
[
'name' => '张三1',
'sex' => '男'
],
[
'name' => '李四',
'sex' => '女'
],

];




/*
* $dataArr array 要排序数组
* $whereArr array 排序的条件
* $key string 要排序数组的排序条件字段
* return array
*/
function SortAry($dataArr = [], $whereArr = [], $key = ''){

$returnArr = [];
if(empty($dataArr) || empty($whereArr) || empty($key) )
{
$returnArr['error'] = '参数必须';
return $returnArr;
}
if(!is_array($dataArr))
{
$returnArr['error'] = '第一个参数 $dataArr必须是数组';
return $returnArr;
}
if(!is_array($whereArr))
{
$returnArr['error'] = '第二个参数 $whereArr必须是数组';
return $returnArr;
}
if(!is_string($key))
{
$returnArr['error'] = '第三个参数 $key必须是字符串';
return $returnArr;
}

$newArr = [];
$newReArr = [];
foreach($dataArr as $dKey => $dVal){
//不是二维跳过
if(!is_array($dVal))
{
$newReArr[] = $dVal;
continue;
}

//判断条件字段是否设置
if(!isset($dVal[$key]))
{
$newReArr[] = $dVal;
continue;
}

//不在排序条件中
if(!in_array($dVal[$key], $whereArr))
{
$newReArr[] = $dVal;
continue;
}
$newArr[$dVal[$key]][] = $dVal;
}

if($newArr)
{
foreach($whereArr as $wKey => $wVal){

//判断条件字段是否设置
if(isset($newArr[$wVal])){

foreach($newArr[$wVal] as $nKey => $nVal){
$returnArr[] = $nVal;
}
}
}
}
$returnArr = array_merge($returnArr, $newReArr);

return $returnArr;
}

$reData = SortAry($dataArr, $whereArr, '-1');

if(isset($reData['error']))
{
echo $reData['error'];
}
else
{
var_dump($reData);
}

转载于:https://www.cnblogs.com/shuaiqun/p/8834314.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值