多次元配列があり、各配列の値で並べ替えようとしています。
私は多次元配列をその中の値で実際にソートしたことがなく、自分自身も喜びがありませんでした。
以下の配列と、配列内の値でソートしたときの出力の例を示しました。
配列
$list = array (
0 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="7">',
1 => '7',
2 => '17',
3 => 'Group Name',
4 => 'Katie-Lee',
5 => 'Homes',
6 => 'b@b.com'
),
1 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="22">',
1 => '22',
2 => '17',
3 => 'Group Name',
4 => 'John',
5 => 'Collins',
6 => 'a@a.com',
),
2 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="9">',
1 => '9',
2 => '17',
3 => 'Group Name',
4 => 'Rob',
5 => 'Smith',
6 => 'rob@smith.com',
),
3 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="1">',
1 => '1',
2 => '17',
3 => 'Group Name',
4 => 'Claire',
5 => 'Taylor',
6 => 'claire.taylor@example.com',
),
);
キー $list[][1] (id) でソート
$list = array (
0 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="1">',
1 => '1', // <-- Sort by id
2 => '17',
3 => 'Group Name',
4 => 'Claire',
5 => 'Taylor',
6 => 'claire.taylor@example.com',
),
1 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="7">',
1 => '7', // <-- Sort by id
2 => '17',
3 => 'Group Name',
4 => 'Katie-Lee',
5 => 'Homes',
6 => 'b@b.com'
),
2 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="9">',
1 => '9', // <-- Sort by id
2 => '17',
3 => 'Group Name',
4 => 'Rob',
5 => 'Smith',
6 => 'rob@smith.com',
),
3 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="22">',
1 => '22', // <-- Sort by id
2 => '17',
3 => 'Group Name',
4 => 'John',
5 => 'Collins',
6 => 'a@a.com',
),
);
キー $list[][6] で並べ替え (メール)
$list = array (
0 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="22">',
1 => '22',
2 => '17',
3 => 'Group Name',
4 => 'John',
5 => 'Collins',
6 => 'a@a.com', // <-- Sort by email
),
1 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="7">',
1 => '7',
2 => '17',
3 => 'Group Name',
4 => 'Katie-Lee',
5 => 'Homes',
6 => 'b@b.com' // <-- Sort by email
),
2 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="1">',
1 => '1',
2 => '17',
3 => 'Group Name',
4 => 'Claire',
5 => 'Taylor',
6 => 'claire.taylor@example.com', // <-- Sort by email
),
3 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="9">',
1 => '9',
2 => '17',
3 => 'Group Name',
4 => 'Rob',
5 => 'Smith',
6 => 'rob@smith.com', // <-- Sort by email
),
);
どんな助けでも素晴らしいでしょう、ありがとう。
アップデート
以下のコードで更新して、他の人でも機能することを示しました。
$list = array (
0 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="7">',
1 => '7',
2 => '17',
3 => 'Group Name',
4 => 'Katie-Lee',
5 => 'Homes',
6 => 'b@b.com'
),
1 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="22">',
1 => '22',
2 => '17',
3 => 'Group Name',
4 => 'John',
5 => 'Collins',
6 => 'a@a.com',
),
2 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="9">',
1 => '9',
2 => '17',
3 => 'Group Name',
4 => 'Rob',
5 => 'Smith',
6 => 'rob@smith.com',
),
3 => array(
0 => '<input class="id" name="id[]" type="checkbox" value="1">',
1 => '1',
2 => '17',
3 => 'Group Name',
4 => 'Claire',
5 => 'Taylor',
6 => 'claire.taylor@example.com',
),
);
echo 'Array before sort:';
print("<pre>" . print_r($list, true). "</pre>");
$sortField = 6; // the id
usort($list, function($a, $b) use ($sortField)
{
return strnatcmp($a[$sortField], $b[$sortField]);
});
echo 'Array after sort:';
print("<pre>" . print_r($list, true). "</pre>");