Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将包含特定值的数组推送到最后一个位置?_Php_Arrays_Sorting - Fatal编程技术网

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"
  }
}
我可以使用以下代码将包含fieldname
password
的数组添加到末尾:

$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。我希望这有帮助。