सबअरे डेटा को कुशलतापूर्वक समूहबद्ध करने के लिए, आपको अस्थायी कुंजियों को लागू करना चाहिए। cityId
समूह के लिए उपयुक्त मान है -- क्योंकि cityNames
भविष्य में जानबूझकर डुप्लिकेट किया जा सकता है लेकिन cityId
अपनी डेटाबेस तालिका में कभी भी अनजाने में/जानबूझकर डुप्लिकेट नहीं करना चाहिए।
जब प्रत्येक नया cityId
सामने आया है, सशर्त isset()
कॉल यह निर्धारित करेगा कि क्या डेटा का एक नया/पूर्ण सेट संग्रहीत किया जाना चाहिए, या यदि डेटा को केवल उप-सरणी में जोड़ा जाना चाहिए।
मैं array_slice()
को कॉल कर रहा हूं चूंकि यह अनावश्यक सिंटैक्स / कोड-ब्लोट को कम करता है।
सभी पंक्तियों को दोहराने के बाद, आप $result
. को फिर से अनुक्रमित कर सकते हैं सरणी, इसे runBasedOnCity
. के अंदर नेस्ट करें , और status
जोड़ें तत्व।
मैं PRETTY_PRINT
के साथ अपना डेमो दिखाऊंगा ताकि इसे पढ़ना आसान हो, लेकिन आपके वास्तविक कोड में, आपको पैरामीटर को हटा देना चाहिए। साथ ही, सलाह का एक शब्द - बेहतर पठनीयता के लिए अपने चर नामों को संक्षिप्त रखने का प्रयास करें।
कोड:(डेमो )
$resultset = [
["id" => "1", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "2", "distance" => "10k", "status" => "1"],
["id" => "2", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "1", "distance" => "5k", "status" => "1"],
["id" => "3", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "5", "distance" => "3k", "status" => "0"],
["id" => "4", "cityId" => "2", "cityName" => "Chennai", "runId" => "1", "distance" => "5k", "status" => "1"],
["id" => "5", "cityId" => "2", "cityName" => "Chennai", "runId" => "2", "distance" => "10k", "status" => "1"],
["id" => "6", "cityId" => "2", "cityName" => "Chennai", "runId" => "4", "distance" => "15k", "status" => "1"]
];
foreach ($resultset as $row) {
if (!isset($result[$row["cityId"]])) {
$result[$row["cityId"]] = array("id" => $row["id"], "cityId" => $row["cityId"], $row["cityName"] => array(array_slice($row,-3)));
} else {
$result[$row['cityId']][$row["cityName"]][] = array_slice($row,-3);
}
}
if (!isset($result)) { // don't need to check rowCount() at all
$result = 'Runs not found';
} else {
$result = array_values($result);
}
$result = array("status" => true, "runsBasedOnCity" => $result);
var_export(json_encode($result, JSON_PRETTY_PRINT));
आउटपुट:
'{
"status": true,
"runsBasedOnCity": [
{
"id": "1",
"cityId": "1",
"Bengaluru": [
{
"runId": "2",
"distance": "10k",
"status": "1"
},
{
"runId": "1",
"distance": "5k",
"status": "1"
},
{
"runId": "5",
"distance": "3k",
"status": "0"
}
]
},
{
"id": "4",
"cityId": "2",
"Chennai": [
{
"runId": "1",
"distance": "5k",
"status": "1"
},
{
"runId": "2",
"distance": "10k",
"status": "1"
},
{
"runId": "4",
"distance": "15k",
"status": "1"
}
]
}
]
}'
यह समझाने के बाद कि आप id
. को कैसे सुरक्षित रखना चाहते हैं उप-सरणी में मान, यहाँ वह समाधान है:
कोड:(डेमो )
foreach ($resultset as $row) {
if (!isset($result[$row["cityId"]])) {
$result[$row["cityId"]] = array("cityId" => $row["cityId"], $row["cityName"] => array(array("id" => $row["id"])+array_slice($row,-3)));
} else {
$result[$row['cityId']][$row["cityName"]][] = array("id" => $row["id"])+array_slice($row,-3);
}
}
if (!isset($result)) { // don't need to check rowCount() at all
$result = 'Runs not found';
} else {
$result = array_values($result);
}
$result = array("status" => true, "runsBasedOnCity" => $result);
var_export(json_encode($result, JSON_PRETTY_PRINT));