2015-04-03 1 views
2

У меня есть этот массив:функция array_multisort в PHP изменить ключ моего массива

$array["4E-952778"][0]['fileName'] = "File 1"; 
$array["4E-952778"][0]['product'] = "Muse On Demand"; 
$array["4E-952778"][1]['fileName'] = "File 2"; 
$array["4E-952778"][1]['product'] = "Muse On Demand"; 

$array["15210"][0]['fileName'] = "File 3"; 
$array["15210"][0]['product'] = "4Manager"; 
$array["15210"][1]['fileName'] = "File 4"; 
$array["15210"][1]['product'] = "4Manager"; 

$products = array(); 
foreach ($array as $key => $row) { 
    $products[$key] = $row[0]['product'];  
} 
array_multisort($products, SORT_ASC, $array); 

print_r($array); 

и результат:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [fileName] => File 3 
        [product] => 4Manager 
       ) 

      [1] => Array 
       (
        [fileName] => File 4 
        [product] => 4Manager 
       ) 

     ) 
    [4E-952778] => Array 
     (
      [0] => Array 
       (
        [fileName] => File 1 
        [product] => Muse On Demand 
       ) 
      [1] => Array 
       (
        [fileName] => File 2 
        [product] => Muse On Demand 
       ) 
     ) 
) 

Как вы можете наблюдать функцию array_multisort() изменить ключ: 15210 до 0 Почему это изменение?

+0

Ознакомьтесь с руководством! 'Ассоциативные (строковые) клавиши будут поддерживаться' **, но числовые ключи будут переиндексированы. ** – Rizier123

+0

, так как я могу сохранить ключ 15210? – ihssan

+0

Добавьте несколько писем вокруг него, что это не числовая – Rizier123

ответ

0

я нашел решение этой проблемы

uasort($array, function ($a, $b) { 
$i=0; 
return strcmp($a[$i]['product'], $b[$i]['product']); 

});

4

Цитата из manual:

Ассоциативные (строка) ключи будут сохранены, но цифровые клавиши будут вновь проиндексированы.

И PHP автоматически переводит вашу строку «15210» в целое число.

Трюк для этого заключается в том, чтобы добавить «0» к ключу («015210»), это заставит тип casting (string).

Если хотите узнать больше об этом см: Bug #21788 array_multisort() changes array keys unexpectedly given numeric strings as keys

+0

проблема в том, что я не могу измените ключи – ihssan

+0

Ну, приятный маленький трюк, о котором я не знал, пока не знаю, но, к сожалению, он не решает проблемы OP – Rizier123

+0

Я могу сказать вам выполнить цикл на массиве и проверить каждый элемент перед тем, как вы выполните сортировку. Но это нехорошее решение, я думаю. Можете ли вы рассказать нам, почему вы не можете изменять ключи? –