这是我的数组,我希望username
始终位于开头,password
始终位于结尾。
array(5) {
[0]=>
array(8) {
["fieldName"]=>
string(5) "email"
["type"]=>
string(6) "string"
["scale"]=>
int(0)
["length"]=>
int(191)
["unique"]=>
bool(true)
["nullable"]=>
bool(false)
["precision"]=>
int(0)
["columnName"]=>
string(5) "email"
}
[1]=>
array(8) {
["fieldName"]=>
string(8) "isActive"
["type"]=>
string(7) "boolean"
["scale"]=>
int(0)
["length"]=>
NULL
["unique"]=>
bool(false)
["nullable"]=>
bool(false)
["precision"]=>
int(0)
["columnName"]=>
string(9) "is_active"
}
[2]=>
array(8) {
["fieldName"]=>
string(8) "password"
["type"]=>
string(6) "string"
["scale"]=>
int(0)
["length"]=>
int(64)
["unique"]=>
bool(false)
["nullable"]=>
bool(false)
["precision"]=>
int(0)
["columnName"]=>
string(8) "password"
}
[3]=>
array(8) {
["fieldName"]=>
string(8) "username"
["type"]=>
string(6) "string"
["scale"]=>
int(0)
["length"]=>
int(25)
["unique"]=>
bool(true)
["nullable"]=>
bool(false)
["precision"]=>
int(0)
["columnName"]=>
string(8) "username"
}
[4]=>
array(9) {
["fieldName"]=>
string(2) "id"
["type"]=>
string(7) "integer"
["scale"]=>
int(0)
["length"]=>
NULL
["unique"]=>
bool(false)
["nullable"]=>
bool(false)
["precision"]=>
int(0)
["id"]=>
bool(true)
["columnName"]=>
string(2) "id"
}
}
我可以使用以下代码获取包含字段名称password
的数组:
$item = $myArray[2];
unset($myArray[2]);
array_push($myArray, $item);
但这实际上不是我想要的。因为密码并不总是键2
答案 0 :(得分:2)
我没有测试过这个,因为我不想手动将您的数组重新输入为真实代码。
代码使用array_column组成字段名称的平面数组并搜索“密码”。
如果找到它,则会在数组的最后添加一个副本,然后删除原始副本,然后执行array_values重新索引该数组。
$fieldname = array_column($arr, "fieldName");
$password = array_search("password", $fieldname);
$username = array_search("username", $fieldname);
if($password !== false){
$arr[] = $arr[$password];
unset($arr[$password]);
}
if($username!== false){
array_unshift($arr, $arr[$username]);
unset($arr[$username]);
}
$arr = array_values($arr);
var_export($arr);
答案 1 :(得分:2)
此usort
将执行您想要的操作。它使用自定义排序功能,将username
排在列表的顶部,password
排在列表的底部。所有其他值通常都以开始时的顺序结束,尽管这可能是不可预测的。
usort($data, function ($a, $b) { if ($a['fieldName'] == 'username' || $b['fieldName'] == 'password') return -1;
elseif ($a['fieldName'] == 'password' || $b['fieldName'] == 'username') return 1;
else return 0;
});
我用每个条目中只有几个值制作了小的demo on 3v4l.org;因为输出结果是
Array
(
[0] => Array
(
[fieldName] => username
[type] => string
)
[1] => Array
(
[fieldName] => email
[type] => string
)
[2] => Array
(
[fieldName] => isActive
[type] => boolean
)
[3] => Array
(
[fieldName] => id
[type] => integer
)
[4] => Array
(
[fieldName] => password
[type] => string
)
)