Here's a solution using a function I found from php documentation:
<?php
/*
Question Author: Not a Pro
Question Answerer: Jacob Mulquin
Question: Sort Nested Array base on Value in PHP
URL: https://stackoverflow.com/questions/76419733/sort-nested-array-base-on-value-in-php
Tags: php, arrays
*/
// Author: jimpoz at jimpoz dot com
// URL: https://www.php.net/manual/en/function.array-multisort.php#100534
function array_orderby()
{
$args = func_get_args();
$data = array_shift($args);
foreach ($args as $n => $field) {
if (is_string($field)) {
$tmp = array();
foreach ($data as $key => $row)
$tmp[$key] = $row[$field];
$args[$n] = $tmp;
}
}
$args[] = &$data;
call_user_func_array('array_multisort', $args);
return array_pop($args);
}
function sortProjectsByClientName(&$projects)
{
foreach ($projects as &$project) {
$project['Client'] = array_orderby($project['Client'], 'Name', SORT_ASC);
}
}
$projects = [
[
'project_id' => 1,
'Client' => [
['Name' => 'Franco',
'Amount' => 1000.00,
],
['Name' => 'Allan',
'Amount' => 1000.00,
],
['Name' => 'Booby',
'Amount' => 1000.00,
]
],
],
[
'project_id' => 2,
'Client' => [
['Name' => 'Bob',
'Amount' => 1000.00,
],
['Name' => 'Trevor',
'Amount' => 1000.00,
],
['Name' => 'Alice',
'Amount' => 1000.00,
]
],
]
];
sortProjectsByClientName($projects);
var_dump($projects);
Yields:
array(2) {
[0]=>
array(2) {
["project_id"]=>
int(1)
["Client"]=>
array(3) {
[0]=>
array(2) {
["Name"]=>
string(5) "Allan"
["Amount"]=>
float(1000)
}
[1]=>
array(2) {
["Name"]=>
string(5) "Booby"
["Amount"]=>
float(1000)
}
[2]=>
array(2) {
["Name"]=>
string(6) "Franco"
["Amount"]=>
float(1000)
}
}
}
[1]=>
array(2) {
["project_id"]=>
int(2)
["Client"]=>
array(3) {
[0]=>
array(2) {
["Name"]=>
string(5) "Alice"
["Amount"]=>
float(1000)
}
[1]=>
array(2) {
["Name"]=>
string(3) "Bob"
["Amount"]=>
float(1000)
}
[2]=>
array(2) {
["Name"]=>
string(6) "Trevor"
["Amount"]=>
float(1000)
}
}
}
}