首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按要求的顺序排列数组

按要求的顺序排列数组
EN

Stack Overflow用户
提问于 2011-04-13 13:37:33
回答 5查看 1.3K关注 0票数 0

我有一个数组

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [COMPANY NAME] => 1
            [LPO NUMBER] => PO1
            [LPO DATE] => 2011-04-13 10:08:37
            [LPO AMT] => 1000
            [PENDING AMT] => 1000
            [PRIORITY] => 1
            [AMOUNT] => 200
            [BENEFICIARY NAME] => Self
            [PAYMENT AS] => 1
            [VENDOR NAME] => 0
            [FINAL PAYMENT] => 
            [doc_id] => 2
            [Vendor Name] => Dept. of Economic Development.
            [Reference Number] => PR_XHA_210
            [Pay Cheque Number] => N/A
            [Paid] => 0
        )

    [1] => Array
        (
            [COMPANY NAME] => 1
            [LPO NUMBER] => PO1
            [LPO DATE] => 2011-04-13 10:08:37
            [LPO AMT] => 1000
            [PENDING AMT] => 800
            [PRIORITY] => 1
            [AMOUNT] => 800
            [BENEFICIARY NAME] => Self
            [PAYMENT AS] => 1
            [VENDOR NAME] => 0
            [FINAL PAYMENT] => 
            [doc_id] => 3
            [Vendor Name] => Dept. of Economic Development.
            [Reference Number] => PR_XHA_211
            [Pay Cheque Number] => N/A
            [Paid] => 0
        )

)

我需要按照所需的索引顺序排列数组,如下所示

代码语言:javascript
复制
[0] => Array
        (
            [Reference Number] => PR_XHA_210
            [Vendor Name] => Dept. of Economic Development.
            [BENEFICIARY NAME] => Self
            [LPO DATE] => 2011-04-13 10:08:37
            [LPO NUMBER] => PO1
            [LPO AMT] => 1000
            [Paid] => 0
            [AMOUNT] => 200
            [doc_id] => 2
            [doc_id] => 2
            [Pay Cheque Number] => N/A

        )

如何做到这一点?请帮帮我。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-13 13:50:55

试试这个(未测试):

代码语言:javascript
复制
$keys = array(
    'Reference Number',
    'Vendor Name',
    ...
);

$reordered = array();
foreach ($array as $item) {
    $new_item = array();
    foreach ($keys as $key) {
        $new_item[$key] = $item[$key];
    }
    $reordered[] = $new_item;
}

这将创建一个包含所有行的新数组$reordered,并根据$keys中定义的顺序对键进行重新排序。

或者,您可以使用uksort和一个回调函数对数组进行就地重新排序(同样,未经测试)。

代码语言:javascript
复制
function sort_keys($a, $b) {
    static $keys = array(
        'Reference Number',
        'Vendor Name',
        ...
    );

    return array_search($a, $keys) - array_search($b, $keys);
}

foreach ($array as &$item) {
    uksort($item, 'sort_keys');
}

第三种选择是让您的数组保持原样,但编辑视图代码:

代码语言:javascript
复制
$keys = array(
    'Reference Number',
    'Vendor Name',
    ...
);

foreach ($array as $item) {
    foreach ($keys as $key) {
        printf('<tr><th>%s</th><td>%s</td></tr>',
            htmlspecialchars($key),
            htmlspecialchars($item[$key]));
    }
}
票数 2
EN

Stack Overflow用户

发布于 2011-04-13 13:47:42

您可以尝试巧妙地对数组进行实际排序,但最简单的方法是简单地重新创建它:

代码语言:javascript
复制
$rearrangedArray = array(
    'Reference Number' => $oldArray['Reference Number'],
    'Vendor Name'      => $oldArray['Vendor Name'],
    ...
);

不过,这似乎是一件非常荒谬的事情。您的数组是按数字索引和排序的,或者您使用的是关联数组。两者都需要是非常奇怪的。

我需要的是迭代数组,以便每个引用都获得它的值所需的特定值,就像wise这里的first "<td>“必须有”

"<td>“”作为第一个值

在这种情况下,您应该显式创建表,如下所示:

代码语言:javascript
复制
<tr>
    <td>Reference Number:</td> <td><?php echo $array['Reference Number']; ?></td>
    <td>Vendor Name:</td>      <td><?php echo $array['Vendor Name']; ?></td>
    ...
</tr>
票数 1
EN

Stack Overflow用户

发布于 2011-04-13 13:52:57

从评论中阅读你的需求,不要对你的关联数组排序。相反,做一件更干净的事情,比如:

  1. 具有到关联数组键映射的整数索引。例如:

数组数组=(“参考号”,“供应商名称”,“受益者名称”....);

for($i=0;$i< count($dataArray);$i++)

代码语言:javascript
复制
{
代码语言:javascript
复制
      $myCurrentKey = $myIndexes[$i];
      $myCurrentData = $dataArray[$myCurrentKey];
      echo "<td>".$myCurrentData."</td>";
 }

在按顺序打印<td>时,从$myIndexes获取keyName,然后从数据数组获取值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5644854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档