Pergunta

Eu tenho a seguinte matriz:

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

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

Gostaria de poder classificar o array pela chave pública.Eu sei que posso ter que usar qualquer um ksort ou usort mas não tenho certeza de como implementar isso.

Qualquer ideia seria ótima, obrigado!

Foi útil?

Solução

usort($array, function ($a, $b) { return $a["public"] - $b["public"]; });

Outras dicas

Aqui está um link interessante: http://www.the-art-of-web.com/php/sortarray/

eu tentaria um

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

Posso tentar um código de amostra mediante solicitação, mas as informações já estão disponíveis.

dê uma olhada nisso, usando 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>';

A maneira geral de fazer isso usando array_multisort é colocar seu valor de classificação em seu próprio array e, em seguida, classificar os dois arrays usando-o como o array de classificação principal.

Experimente o seguinte:

$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>';

Você poderia usar usort com função de retorno de chamada.

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

usort($array, "cmp");

Experimente isto:

$code = "return (-1*strnatcmp(\$a['public'], \$b['public']));";
uasort($array, create_function('$a,$b', $code));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top