Php 如何将包含特定值的数组推送到最后一个位置?
这是我的数组,我希望Php 如何将包含特定值的数组推送到最后一个位置?,php,arrays,sorting,Php,Arrays,Sorting,这是我的数组,我希望username总是在开头,而password总是在结尾 array(5) { [0]=> array(8) { ["fieldName"]=> string(5) "email" ["type"]=> string(6) "string" ["scale"]=> int(0) ["length"]=> int(191) ["unique"]=> b
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"
}
}
我可以使用以下代码将包含fieldnamepassword
的数组添加到末尾:
$item = $myArray[2];
unset($myArray[2]);
array_push($myArray, $item);
但这其实不是我想要的。因为密码并不总是键2,所以我没有测试它,因为我不想手动将数组重新键入实际代码 该代码使用array_列生成字段名的平面数组,并搜索“password”。
如果找到它,它会在数组中最后添加一个副本并删除原始副本,然后执行数组_值以重新为数组编制索引
$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);
我没有测试过这个,因为我不想手动将数组重新键入实际代码 该代码使用array_列生成字段名的平面数组,并搜索“password”。
如果找到它,它会在数组中最后添加一个副本并删除原始副本,然后执行数组_值以重新为数组编制索引
$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);
这会满足你的要求。它使用一个自定义排序函数,将用户名
排序到列表的顶部,将密码
排序到列表的底部。所有其他值的结束顺序通常与它们开始的顺序相同,尽管这可能是不可预测的
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;
});
我用每个条目中仅有的几个值进行了缩小;因此,输出结果为
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
)
)
这会满足你的要求。它使用一个自定义排序函数,将用户名
排序到列表的顶部,将密码
排序到列表的底部。所有其他值的结束顺序通常与它们开始的顺序相同,尽管这可能是不可预测的
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;
});
我用每个条目中仅有的几个值进行了缩小;因此,输出结果为
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
)
)
为您正在使用的编程语言添加标记。啊,好的,这是phpca。您可以将数组作为var_export或json_encode发布吗?对于您正在使用的编程语言来说,使用add标记会容易得多。啊,好的,是phpca,您可以将数组发布为var_export或json_encode吗?这将更容易工作谢谢你,它正在工作!你能解释一下吗,因为我不明白它为什么会起作用。为什么密码是一次“$a”和另一次“$b”@Jarla当您使用这样的自定义函数进行排序时,您不知道某个值是出现在
$a
还是$b
变量中,它只取决于排序
处理数组中条目的顺序。因此,您必须允许'password'
位于$a
或$b
中。结果的变化取决于它所处的变量(因为排序函数在$a<$b
中返回-1,在$a>$b
中返回1),因此如果它在$a
中,您希望它比数组中的其他值排序得晚(因此返回1),而如果它在$b
中,我们希望其他值排序得早,因此返回-1。我希望这有帮助。谢谢你,它正在工作!你能解释一下吗,因为我不明白它为什么会起作用。为什么密码是一次“$a”和另一次“$b”@Jarla当您使用这样的自定义函数进行排序时,您不知道某个值是出现在$a
还是$b
变量中,它只取决于排序
处理数组中条目的顺序。因此,您必须允许'password'
位于$a
或$b
中。结果的变化取决于它所处的变量(因为排序函数在$a<$b
中返回-1,在$a>$b
中返回1),因此如果它在$a
中,您希望它比数组中的其他值排序得晚(因此返回1),而如果它在$b
中,我们希望其他值排序得早,因此返回-1。我希望这有帮助。