3

次の配列があります。

Array
(
    [Places] => Array
        (
            [public] => 0
            [entities] => Array
                (
                    ...
                )
        )
    [Issues] => Array
        (
            [public] => 1
            [entities] => Array
                (
                    ...
                )
        )

    [Source] => Array
        (
            [public] => 0
            [entities] => Array
                (
                    ...
                )
        )
)

配列を公開鍵でソートできるようにしたいです。ksortまたはのいずれかを使用する必要があるかもしれませんが、usortこれを実装する方法がわかりません。

どんなアイデアも素晴らしいでしょうありがとう!

4

6 に答える 6

4
usort($array, function ($a, $b) { return $a["public"] - $b["public"]; });
于 2010-07-08T12:18:59.997 に答える
1

ここに興味深いリンクがあります: http://www.the-art-of-web.com/php/sortarray/

私は試してみます

usort(usort(array, function), function);

リクエストに応じてサンプル コードを試すことができますが、情報は既に用意されています。

于 2010-07-08T12:24:53.960 に答える
0

array_multisortを使用して、これを見てください。

$test   =   array(
        'Places' => array(
            'public' => 0,
            'entities' => array(

            )
        ),
        'Issues' => array(
            'public' => 1,
            'entities' => array()
        ),
        'Source' => array(
            'public' => 0,
            'entities' => array()
        )
    );

    echo '<pre>';
    print_r($test);
    echo '</pre>';

    array_multisort($test,SORT_ASC,$test);

    echo '<pre>';
    print_r($test);
    echo '</pre>';
于 2010-07-08T12:19:46.530 に答える
0

これを行う一般的な方法array_multisortは、ソート値を独自の配列に配置し、それをプライマリソート配列として使用して両方の配列をソートすることです。

次のことを試してください。

$test   =   array(
    'Places' => array(
        'public' => 0,
        'entities' => array(

        )
    ),
    'Issues' => array(
        'public' => 1,
        'entities' => array()
    ),
    'Source' => array(
        'public' => 0,
        'entities' => array()
    )
);

echo '<pre>';
print_r($test);
echo '</pre>';

$sort = array();
foreach ($test as $k => $a) {
    $sort[$k] = $a['public'];
}

// placing $sort first in array_multisort causes $test to be sorted in same order as the values in $sort
array_multisort($sort,SORT_ASC,$test);

echo '<pre>';
print_r($test);
echo '</pre>';
于 2010-07-08T12:30:35.113 に答える
0

コールバック関数で usort を使用できます。

function cmp($a, $b) {
  return $a['public'] == $b['public'] ? 0 : $a['public'] > $b['public'] ? 1 : -1;
}

usort($array, "cmp");
于 2010-07-08T12:30:58.187 に答える
0

これを試して:

$code = "return (-1*strnatcmp(\$a['public'], \$b['public']));";
uasort($array, create_function('$a,$b', $code));
于 2010-07-08T12:31:31.273 に答える