3

さて、私の質問は複雑です。

私はそのjsonファイルを持っています:

{
"books": [
    {
        "book": [
            {
                "Title": "Java How to Program",
                "Author": "Deitel & Deitel",
                "Edition": "2007"
            }
        ]
    },
    {
        "book": [
            {
                "Title": "Patterns of Enterprise Application Architecture",
                "Author": "Martin Fowler",
                "Edition": "2002"
            }
        ]
    },
    {
        "book": [
            {
                "Title": "Head First Design Patterns",
                "Author": "Elisabeth Freeman",
                "Edition": "2004"
            }
        ]
    },
    {
        "book": [
            {
                "Title": "Internet & World Wide Web: How to Program",
                "Author": "Deitel & Deitel",
                "Edition": "2007"
            }
        ]
    }
]

}

私のPHPでは、これがあります:

    $file = file_get_contents('books.json');
    $json = json_decode($file, true);

複数のルールで配列をソートするにはどうすればよいですか? 例えば:

echo sort_my_array('Title', ASC, 'Author', DESC, $json);

私は非常に多くの方法で試しましたが、array_multidimensional を使用しようとするとエラーが発生すると思います。

誰かがこれを作成する方法を私に説明できますか?

前もって感謝します

4

3 に答える 3

5

これを試して

    $file = file_get_contents('books.json');
    $json = json_decode($file, true);
   $json = array_map(function($a) { return $a['book'][0]; }, $json['books']);
 foreach ($json as $key => $row) {
    $title[$key] = $row['Title'];
   $author[$key] = $row['Author'];
 }
 array_multisort($title, SORT_ASC,  $author, SORT_DESC, $json);
 echo "<pre>";
 print_r($json);
 echo "</pre>";

私はそれを試してみましたが、その作業

于 2013-03-12T11:08:56.687 に答える
1

使用するarray_multisort

<?php
$json = '{
"books": [
{
    "book": [
        {
            "Title": "Java How to Program",
            "Author": "Deitel & Deitel",
            "Edition": "2007"
        }
    ]
},
{
    "book": [
        {
            "Title": "Patterns of Enterprise Application Architecture",
            "Author": "Martin Fowler",
            "Edition": "2002"
        }
    ]
},
{
    "book": [
        {
            "Title": "Head First Design Patterns",
            "Author": "Elisabeth Freeman",
            "Edition": "2004"
        }
    ]
},
{
    "book": [
        {
            "Title": "Internet & World Wide Web: How to Program",
            "Author": "Deitel & Deitel",
            "Edition": "2007"
        }
    ]
}
]
}';

$json = json_decode($json,true);
echo "<pre>";
//print_r($json);

$sort = array();
foreach($json['books'] as $k=>$v) {
$sort['title'][$k] = $v['book'][0]['Title'];
$sort['author'][$k] = $v['book'][0]['Author'];
}
//print_r($sort);
array_multisort($sort['title'], SORT_DESC, $sort['author'], SORT_ASC,$json['books']);
print_r($json['books']);

出力http://codepad.viper-7.com/dXjDLg

于 2013-03-12T10:53:59.153 に答える
1

array_multisortを使用する — 複数または多次元の配列を並べ替えます。

例:

<?php
// Obtain a list of columns
foreach ($book as $key => $row) {
    $Title[$key]  = $row['Title'];
    $Author[$key] = $row['Author'];
}

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($Title, SORT_ASC, $Author, SORT_DESC, $book);
?>

これがあなたを助けますように。

于 2013-03-12T10:59:38.300 に答える