使用php

时间:2016-04-19 08:31:51

标签: php arrays

我有以下数组,并且可以随时更改。

Array
(
    [For Sale] => For Sale
    [Sold] => Sold
    [To Let] => To Let
    [Let] => Let
    [Under Offer] => Under Offer
    [Exchanged] => Exchanged
    [Withdrawn] => Withdrawn
    [Acquired] => Acquired
)

无论初始序列是什么,但是当页面加载时,它应该看起来像

Array
    (
        [For Sale] => For Sale       
        [Under Offer] => Under Offer
        [Exchanged] => Exchanged
        [Withdrawn] => Withdrawn
        [Acquired] => Acquired
        [Sold] => Sold
        [To Let] => To Let
        [Let] => Let
    )

基本上这三个元素应该保留在数组的底部。

[Sold] => Sold
[To Let] => To Let
[Let] => Let

非常感谢任何帮助。提前谢谢。

4 个答案:

答案 0 :(得分:1)

让您的数组名称为$arr。 首先将值存储在变量中然后取消设置,之后使用array_push将它们存储在数组的最后一个。

$sold = $arr['Sold'];
unset($arr['Sold']);

$to_let = $arr['To Let']; 
unset($arr['To Let']);

$let = $arr['Let']; 
unset($arr['Let']);

array_push($arr, $sold, $to_let, $let);

答案 1 :(得分:1)

您必须使用foreach格式化数据。

$data = [
 'For Sale' => For Sale
 'Sold' => Sold
 'To Let' => To Let
 'Let' => Let
 'Under Offer' => Under Offer
 'Exchanged' => Exchanged
 'Withdrawn' => Withdrawn
 'Acquired' => Acquired
];

$newData = [];

foreach($data as $key => $val) {
   $newData[] = [
       'For Sale' => $val['For Sale'],
       'Under Offer' => $val['Under Offer'],
       'Exchanged' => $val['Exchanged'],
       'Withdrawn' => $val['Withdrawn'],
       'Acquired' => $val['Acquired'],
       'Sold' => $val['Sold'],
       'To Let' => $val['To Let'],
       'Let' => $val['Let']
   ]
}

print_r($newData);

答案 2 :(得分:1)

在这里,我使用in_array()将密钥与给定密钥'Sold','To Let','Let'匹配,然后从$input数组中取消该密钥并将该密钥值推送到数组。

<?php
$input = array(
    'For Sale' => 'For Sale',
    'Sold' => 'Sold',
    'To Let' => ' To Let',
    'Let' => 'Let',
    'Under Offe' => 'Under Offer',
    'Exchanged' => 'Exchanged',
    'Withdrawn' => 'Withdrawn',
    'Acquired' => 'Acquired'
);

foreach ($input as $key => $val) {
    if (in_array($key, array('Sold', 'To Let', 'Let'))) {
        unset($input[$key]);
        $input[$key] = $val;
    }
}

echo "<pre>";
print_r($input);
?>

这将输出:

Array
(
    [For Sale] => For Sale
    [Under Offe] => Under Offer
    [Exchanged] => Exchanged
    [Withdrawn] => Withdrawn
    [Acquired] => Acquired
    [Sold] => Sold
    [To Let] =>  To Let
    [Let] => Let
)

答案 3 :(得分:0)

使用array_multisort函数和“自定义顺序”(几个维度排序)的简短有效的解决方案:

// $arr is your initial array
$custom_order = ['F'=> 0,'S' => 5,'T' => 6,'L' =>7,'U' => 1,'E' => 2,'W' => 3,'A' => 4];
array_multisort($custom_order, SORT_ASC, $arr);

print_r($arr);

输出:

Array
(
    [For Sale] => For Sale
    [Under Offer] => Under Offer
    [Exchanged] => Exchanged
    [Withdrawn] => Withdrawn
    [Acquired] => Acquired
    [Sold] => Sold
    [To Let] => To Let
    [Let] => Let
)

使用uksortarray_search函数的其他(更好)方法:

$custom_order = ['For Sale','Under Offer','Exchanged','Withdrawn','Acquired','Sold','To Let','Let'];
uksort($arr, function($a, $b) use($custom_order){
    return array_search($a,$custom_order) - array_search($b,$custom_order);
});

http://php.net/manual/en/function.uksort.php