如何在php中对多数组进行排序
我有一个多维数组,我想在每个数组嵌套数组中基于SequenceID排序数组,基于序列号,如1,2,3,4,5,6,如SequenceID数据显示。如何做到这一点请任何人在这方面的帮助。 我的数组数据如下如何在php中对多数组进行排序,php,arrays,Php,Arrays,我有一个多维数组,我想在每个数组嵌套数组中基于SequenceID排序数组,基于序列号,如1,2,3,4,5,6,如SequenceID数据显示。如何做到这一点请任何人在这方面的帮助。 我的数组数据如下 <?php $dataarray= array( "CAR_DATA" => array( "SNo" => 1607, "SRRequestID" => 22666
<?php
$dataarray= array(
"CAR_DATA" => array(
"SNo" => 1607,
"SRRequestID" => 22666,
"AncillarySearchID"=>3333,
"car_data_line" => array (
"QuoteID" => 1607,
"SequenceID" => 5
)
),
"FLIGHT_DATA" => array(
"SNo" => 1212,
"SRRequestID" => 2222,
"FLightSearchID"=>3333,
"flight_data_line" => array (
"QuoteID" => 3222,
"SequenceID" => 2
)
),
"FLIGHT_DATA" => array(
"SNo" => 3222,
"SRRequestID" => 2222,
"FLightSearchID"=>3333,
"flight_data_line" => array (
"QuoteID" => 3222,
"SequenceID" => 1
)
),
"HOTEL_DATA" => array(
"SNo" => 343,
"SRRequestID" => 212,
"HotelSearchID"=>3434,
"hotel_data_line" => array (
"QuoteID" => 456,
"SequenceID" => 3
)
),
"HOTEL_DATA" => array(
"SNo" => 32,
"SRRequestID" => 3333,
"HotelSearchID"=>343,
"hotel_data_line" => array (
"QuoteID" => 121,
"SequenceID" => 6
)
),
"HOTEL_DATA" => array(
"SNo" => 344,
"SRRequestID" => 34343,
"HotelSearchID"=>4433,
"hotel_data_line" => array (
"QuoteID" => 22222,
"SequenceID" => 4
)
),
);
echo "<pre>";print_r($dataarray);
?>
Original code
<?php
Array
(
[0] => Array
(
[0] => Array
(
[flight_data] => stdClass Object
(
[0] => stdClass Object
(
[SNo] => 33052
[Flight_Search_ID] => 32955
[SR_Request_ID] => 44331
[quote_flight_data] => Array
(
[0] => stdClass Object
(
[ID] => 11652
[ReqID] => 44331
[SearchID] => 32955
[QuoteID] => 3978
[SequenceID] => 5
[QuoteGeneratedID] => R44331-1464
[RequestID] => 44331
)
)
)
)
[QMergeId] =>
[BookingDate] =>
)
[1] => Array
(
[flight_data] => stdClass Object
(
[0] => stdClass Object
(
[SNo] => 33052
[Flight_Search_ID] => 32955
[SR_Request_ID] => 44331
[quote_flight_data] => Array
(
[0] => stdClass Object
(
[ID] => 11653
[ReqID] => 44331
[SearchID] => 32955
[QuoteID] => 3979
[SequenceID] => 3
[QuoteGeneratedID] => R44331-1464
[RequestID] => 44331
)
)
)
)
[QMergeId] =>
[BookingDate] =>
)
[2] => Array
(
[flight_data] => stdClass Object
(
[0] => stdClass Object
(
[SNo] => 33052
[Flight_Search_ID] => 32955
[SR_Request_ID] => 44331
[quote_flight_data] => Array
(
[0] => stdClass Object
(
[ID] => 11652
[ReqID] => 44331
[SearchID] => 32955
[QuoteID] => 3980
[SequenceID] => 2
[QuoteGeneratedID] => R44331-1464
[RequestID] => 44331
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200317
)
[3] => Array
(
[flight_data] => stdClass Object
(
[0] => stdClass Object
(
[SNo] => 33052
[Flight_Search_ID] => 32955
[SR_Request_ID] => 44331
[quote_flight_data] => Array
(
[0] => stdClass Object
(
[ID] => 11653
[ReqID] => 44331
[SearchID] => 32955
[QuoteID] => 3981
[SequenceID] => 6
[QuoteGeneratedID] => R44331-1464
[RequestID] => 44331
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200317
)
[4] => Array
(
[hotel_data] => stdClass Object
(
[0] => stdClass Object
(
[hid] => 16014
[SNo] => 16019
[Hotel_Search_ID] => 16014
[SR_Request_ID] => 44331
[quote_hotel_data] => stdClass Object
(
[0] => stdClass Object
(
[QuoteID] => 3943
[SequenceID] => 1
[QuoteGeneratedID] => R44331-1464
[RequestID] => 44331
[SearchID] => 16014
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200317
)
[5] => Array
(
[hotel_data] => stdClass Object
(
[0] => stdClass Object
(
[hid] => 16014
[SNo] => 16019
[Hotel_Search_ID] => 16014
[SR_Request_ID] => 44331
[quote_hotel_data] => stdClass Object
(
[0] => stdClass Object
(
[QuoteID] => 3944
[SequenceID] => 4
[QuoteGeneratedID] => R44331-1464
[RequestID] => 44331
[SearchID] => 16014
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200317
)
)
)
?>
假设您能够按照这种方式制作阵列。因为在数组中有重复的键。您不能保留密钥,因为PHP将保留最后一个密钥。因此,您的阵列应采用以下方式:
<?php
function sortArrayBySequenceID($array) {
$new = [];
foreach ($array as $key => $value) {
if (isset($value['CAR_DATA']['car_data_line']['SequenceID'])) {
$new[$value['CAR_DATA']['car_data_line']['SequenceID']] = $array[$key];
} elseif (isset($value['FLIGHT_DATA']['flight_data_line']['SequenceID'])) {
$new[$value['FLIGHT_DATA']['flight_data_line']['SequenceID']] = $array[$key];
} elseif (isset($value['HOTEL_DATA']['hotel_data_line']['SequenceID'])) {
$new[$value['HOTEL_DATA']['hotel_data_line']['SequenceID']] = $array[$key];
}
}
// Sorts the newly made array based on key
ksort($new);
return $new;
}
print_r(sortArrayBySequenceID($dataArray));
我无法理解排序顺序,使用哪个索引值对数据进行排序,以及排序顺序是什么
asc
或desc
?我的原始代码已在上面编辑,请在我的原始代码中使用SequenceID进行检查和搜索,基于序列号,如1,2,3,4,5..数据需要显示原始数据的问题是,您有多个项目具有相同的键(FLIGHT_data
),因此这将不起作用。print\r($dataarray)代码>仅显示3项数据,其他数据因您的数据被覆盖而丢失。@NigelRen您所说的完全正确,是的,我有多个具有相同键的项目,如航班数据
,酒店数据
,汽车数据
。这个问题的解决方案是什么。但我的经理强迫我在最后两天继续工作。我必须而且应该做任何其他的解决方案。你能改变你如何生成这个数组吗?谢谢它的工作,但我想从我的原始数据。你能在我的帖子里查一下我的原始数据吗?我想知道数据的结果。请在此方面提供帮助。您的原始数据可能是打印($some_变量)
的结果。你能用这个片段显示数据吗?foreach($qq为原始数据){foreach($q为$q){$array=json_decode(json_encode($q),true);echo”“;print_r($array);echo”“;}}
使用上述代码打印此数据。我得到下面的代码片段,请在我的问题中检查更新的原始输出原始数据输出JSON编码和解码后请检查此链接
$array= Array
(
[flight_data] => Array
(
[0] => Array
(
[SNo] => 32999
[Flight_Search_ID] => 32902
[SR_Request_ID] => 44232
[quote_flight_data] => Array
(
[0] => Array
(
[ID] => 11537
[ReqID] => 44232
[SearchID] => 32902
[QuoteID] => 3921
[SequenceID] => 2
[QuoteGeneratedID] => R44232-1426
[RequestID] => 44232
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200416
)
Array
(
[flight_data] => Array
(
[0] => Array
(
[SNo] => 32999
[Flight_Search_ID] => 32902
[SR_Request_ID] => 44232
[quote_flight_data] => Array
(
[0] => Array
(
[ID] => 11537
[ReqID] => 44232
[SearchID] => 32902
[QuoteID] => 3921
[SequenceID] => 1
[QuoteGeneratedID] => R44232-1426
[RequestID] => 44232
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200416
)
Array
(
[hotel_data] => Array
(
[0] => Array
(
[SNo] => 32999
[Flight_Search_ID] => 32902
[SR_Request_ID] => 44232
[quote_hotel_data] => Array
(
[0] => Array
(
[ID] => 11537
[ReqID] => 44232
[SearchID] => 32902
[QuoteID] => 3921
[SequenceID] => 4
[QuoteGeneratedID] => R44232-1426
[RequestID] => 44232
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200416
)
Array
(
[hotel_data] => Array
(
[0] => Array
(
[SNo] => 32999
[Flight_Search_ID] => 32902
[SR_Request_ID] => 44232
[quote_hotel_data] => Array
(
[0] => Array
(
[ID] => 11537
[ReqID] => 44232
[SearchID] => 32902
[QuoteID] => 3921
[SequenceID] => 3
[QuoteGeneratedID] => R44232-1426
[RequestID] => 44232
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200416
)
Array
(
[car_data] => Array
(
[0] => Array
(
[SNo] => 32999
[Flight_Search_ID] => 32902
[SR_Request_ID] => 44232
[quote_car_data] => Array
(
[0] => Array
(
[ID] => 11537
[ReqID] => 44232
[SearchID] => 32902
[QuoteID] => 3921
[SequenceID] => 5
[QuoteGeneratedID] => R44232-1426
[RequestID] => 44232
)
)
)
)
[QMergeId] =>
[BookingDate] => 20200416
)
<?php
$dataArray= array(
array(
"CAR_DATA" => array(
"SNo" => 1607,
"SRRequestID" => 22666,
"AncillarySearchID"=>3333,
"car_data_line" => array (
"QuoteID" => 1607,
"SequenceID" => 5
)
)
),
array(
"FLIGHT_DATA" => array(
"SNo" => 1212,
"SRRequestID" => 2222,
"FLightSearchID"=>3333,
"flight_data_line" => array (
"QuoteID" => 3222,
"SequenceID" => 2
)
)
),
array(
"FLIGHT_DATA" => array(
"SNo" => 3222,
"SRRequestID" => 2222,
"FLightSearchID"=>3333,
"flight_data_line" => array (
"QuoteID" => 3222,
"SequenceID" => 1
)
)
),
array(
"HOTEL_DATA" => array(
"SNo" => 343,
"SRRequestID" => 212,
"HotelSearchID"=>3434,
"hotel_data_line" => array (
"QuoteID" => 456,
"SequenceID" => 3
)
)
),
array(
"HOTEL_DATA" => array(
"SNo" => 32,
"SRRequestID" => 3333,
"HotelSearchID"=>343,
"hotel_data_line" => array (
"QuoteID" => 121,
"SequenceID" => 6
)
)
),
array(
"HOTEL_DATA" => array(
"SNo" => 344,
"SRRequestID" => 34343,
"HotelSearchID"=>4433,
"hotel_data_line" => array (
"QuoteID" => 22222,
"SequenceID" => 4
)
)
),
);
<?php
function sortArrayBySequenceID($array) {
$new = [];
foreach ($array as $key => $value) {
if (isset($value['CAR_DATA']['car_data_line']['SequenceID'])) {
$new[$value['CAR_DATA']['car_data_line']['SequenceID']] = $array[$key];
} elseif (isset($value['FLIGHT_DATA']['flight_data_line']['SequenceID'])) {
$new[$value['FLIGHT_DATA']['flight_data_line']['SequenceID']] = $array[$key];
} elseif (isset($value['HOTEL_DATA']['hotel_data_line']['SequenceID'])) {
$new[$value['HOTEL_DATA']['hotel_data_line']['SequenceID']] = $array[$key];
}
}
// Sorts the newly made array based on key
ksort($new);
return $new;
}
print_r(sortArrayBySequenceID($dataArray));