【问题标题】:php array stack orderingphp数组堆栈排序
【发布时间】:2011-07-01 00:01:11
【问题描述】:

我正在尝试在 php 中对这个数组进行排序:

Array
(
    [Levi Self] => Array
        (
            [0] => Portraits
            [1] => Abstract
        )

    [Portraits] => Array
        (
            [0] => Megan
        )

    [Abstract] => Array
        (
            [0] => Locks
        )

)

看起来像这样:

Array
(
    [Levi Self] => Array
        (
            [Portraits] => Array
               (
                 [0] => Megan
               )

            [Abstract] => Array
               (
                 [0] => Locks
               )
        )
)

这基本上删除了重复的项目“Portraits”和“Abstract”,因为它们已经是数组开始的键,以及第一个键“Levi Self”下的项目。有没有办法做到这一点?谢谢,李维斯

【问题讨论】:

  • 数据从何而来?如果可能的话,似乎更改编译比修正问题更有意义。也似乎是一个 SQL 结果,虽然可能是错误的?
  • 数据来自 SQL 结果,您可以在此处看到(不同的问题)link
  • 介意您发布产生此结果的 SQL 吗?
  • @Ibrahim:查询:$query = mysql_query( "SELECT * FROM table` WHERE uid='1' ORDER BY id DESC");` 并将数组格式化为上述数组:foreach ($list as $key => $arr) { $result[ $arr['parent'] ] [] = $arr['title']; }
  • 什么时候不让父字段成为父行的id?这样你就可以通过SQL实现你想要的。

标签: php arrays multidimensional-array no-duplicates


【解决方案1】:

$priKey = "Levi Self";
$arr = array(
    "Levi Self" => array("Portraits","Abstract"),
    "Portraits" => array("Megan"),
    "Abstract" => array("Locks")
);

function rearrangeData($primaryKey,$myArr){
    foreach($myArr[$primaryKey] as $key => $value){
        $myArr[$primaryKey][$value] = $myArr[$value];
        unset($myArr[$primaryKey][$key]);
        unset($myArr[$value]);
    }

    return $myArr;
}

$arr2 = rearrangeData($priKey, $arr);

print_r($arr); //what you started with
print_r($arr2); //what you want

【讨论】:

  • 我认为这种方法的问题在于数据是动态的。而且您一次可能有多个 $priKey...
猜你喜欢
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2021-11-02
  • 2013-06-19
  • 1970-01-01
相关资源
最近更新 更多