Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- error_reporting(E_ALL | E_STRICT); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
- // Есть 2 массива. Задача: отсортировать второй массив по ключу need точно в том порядке, который стоит в ключе в первом массиве.
- // Т.е. если д11 в первом массиве на первом месте, то во втором массиве элемент с ним тоже должен быть на первом месте.
- $t1 = microtime(true);
- $sample = array(
- '231' => 'д11',
- '230' => 'д10',
- '232' => 'д12',
- '233' => 'д13',
- '234' => 'д14',
- '235' => 'д15',
- '236' => 'д16',
- '237' => 'д17',
- '238' => 'д18',
- '239' => 'д19',
- );
- $arr = array(
- '230' => array('need' => 'д10', 'oth' => 'a'),
- '231' => array('need' => 'д11', 'oth' => 'b'),
- '232' => array('need' => 'д12', 'oth' => 'c'),
- '233' => array('need' => 'д13', 'oth' => 'd'),
- '234' => array('need' => 'д14', 'oth' => 'd'),
- '235' => array('need' => 'д15', 'oth' => 'd'),
- '236' => array('need' => 'д16', 'oth' => 'd'),
- '237' => array('need' => 'д17', 'oth' => 'd'),
- '238' => array('need' => 'д18', 'oth' => 'd'),
- '239' => array('need' => 'д19', 'oth' => 'd'),
- );
- function search($arr, $sample, $new = [])
- {
- foreach ($sample as $num => $D) {
- foreach ($arr as $key => $value) {
- if($arr[$key]['need'] == $D){
- $new[] = $value;
- unset($arr[$key]);
- $j = count($arr);
- if($j > 0){
- search($arr, $sample, $new);
- } else {
- return $new;
- }
- }
- }
- }
- }
- $bb = search($arr, $sample);
- $t2 = microtime(true);
- //echo "<pre>"; var_dump($bb); echo "</pre>";
- usort($arr, function($a, $b) use ($sample) {
- $sample = array_flip($sample);
- return strcmp($sample[$a['need']], $sample[$b['need']]);
- });
- $t3 = microtime(true);
- // Давайте ещё упростим с помощью функции array_multisort
- array_multisort(array_column($arr, 'need'), $arr);
- // Агонь! Это от 7 до 10 раз быстрее чем usort!!
- echo "<pre>"; var_dump($bb); echo "</pre>";
- echo "<pre>"; var_dump($arr); echo "</pre>";
- $f1 = $t2 - $t1;
- $f2 = $t3 - $t2;
- echo "f1 = $f1<br>";
- echo "f2 = $f2<br>";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement