4

はい、私は多くのテクニックを検索して試しましたが、何もうまくいかないようです。これが私の配列です:

Array
(
    [0] => stdClass Object
        (
            [id] => 119
            [name] => Business3
            [start_date] => 1338789600
            [end_date] => 1354604400
        )

    [1] => stdClass Object
        (
            [id] => 153
            [name] => Business1
            [start_date] => 1338962400
            [end_date] => 1370498400
        )

    [2] => stdClass Object
        (
            [id] => 135
            [name] => Business2  
            [start_date] => 1339653600
            [end_date] => 1356937200
        )
)

基本的にこれを名前キーで並べ替えたいのですが、Stackoverflowで試したすべての関数が機能していないようです。たとえば、エラーのない空白のページが表示されます。

私はこれを試しました:

function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) {
    $sort_col = array();
    foreach ($arr as $key=> $row) {
        $sort_col[$key] = $row[$col];
    }

    array_multisort($sort_col, $dir, $arr);
}

array_sort_by_column(json_decode(json_encode($businesses), true), 'name');

しかし、それはうまくいきませんでした。

何か案は?

4

3 に答える 3

11

あなたはほぼ正しいですが$row[$col]、配列のようにオブジェクトにアクセスしようとします。$row->{$col}代わりに次のようなものが必要です。これは、より単純で実用的な例です。

$db = array(
  0 => (object) array('name' => 'Business3'),
  1 => (object) array('name' => 'Business2'),
  2 => (object) array('name' => 'Business1')
);

$col  = 'name';
$sort = array();
foreach ($db as $i => $obj) {
  $sort[$i] = $obj->{$col};
}

$sorted_db = array_multisort($sort, SORT_ASC, $db);

print_r($db);

出力:

Array
(
    [0] => stdClass Object
        (
            [name] => Business1
        )

    [1] => stdClass Object
        (
            [name] => Business2
        )

    [2] => stdClass Object
        (
            [name] => Business3
        )

)
于 2012-06-13T21:39:22.910 に答える
3
usort($array, function($a, $b) {
    return strcmp($a->name, $b->name);
});
于 2015-01-18T14:48:01.420 に答える
0

usortを使用する必要があります...

したがって、2つのオブジェクトを(名前フィールドで)比較する関数を定義してから、配列に対してusortを実行し、関数を2番目の引数として渡します。

このようなもの:

function cmp($a, $b)
{
    if ($a["name"] == $b["name"]) {
        return 0;
    }
    return ($a["name"] < $b["name"]) ? -1 : 1;
}

usort ($my_array, "cmp");
var_dump($my_array);

お役に立てば幸いです。

ベン

于 2012-06-13T21:38:25.977 に答える