LINUX.ORG.RU

Задача (php)


0

1

Ну, например:

$a = array(3=>"a", 1=>"b", 2=>"c"); //Отсортирован по значению
$b = array(1=>"str1-b ", 2=>"str2-c ", 3=> "str3-a "); //Не отсортирован

Надо получить (вывести) «str3-a str1-b str2-c»
А точнее (сначала), отсортировать массив $b так, как стоят соответствующие индексы каждого его значения в массиве $a.

Я в ступоре.

#!/usr/bin/perl

use strict;
use 5.010;

my @a = (3=>"a", 1=>"b", 2=>"c");
my @b = (1=>"str1-b ", 2=>"str2-c ", 3=>"str3-a ");

my %w = map { $a[$_*2] => $_ } 0..$#a/2;
say sort { $w{($a=~/(\d+)/)[0]} <=> $w{($b=~/(\d+)/)[0]} } values %{{@b}};

уверен, что на удобный, глобальный и надёжный пхп перевести будет пустяком. это же не на питон переводить ;)

arsi ★★★★★
()

uasort поможет исполнить любые ваши фантазии.

qnikst ★★★★★
()
$my_array = array(1=>"str1-b ", 2=>"str2-c ", 3=> "str3-a ");

function cmp($a, $b)
{
    $tmp_a = explode("-", $a);
    $tmp_b = explode("-", $b);
    $tmp_a = ord(rtrim($tmp_a[1], " "));
    $tmp_b = ord(rtrim($tmp_b[1], " "));
    if ($tmp_a == $tmp_b) {
        return 0;
    }
    return ($tmp_a < $tmp_b) ? -1 : 1;
}

usort($my_array, "cmp");

var_dump($my_array);

//==============================

array(3) {
  [0]=>
  string(7) "str3-a "
  [1]=>
  string(7) "str1-b "
  [2]=>
  string(7) "str2-c "
}
valich ★★★
()

С другой стороны по условию надо вывести, т. е. отобразить массив «Б» в порядке по массиву «А». Тогда так:

$a = array(3=>"a", 1=>"b", 2=>"c"); //отсортирован по значению
$b = array(1=>"str1-b ", 2=>"str2-c ", 3=>"str3-a "); //Не отсортирован

foreach ($a as $key => $value)
{
    echo $b[$key] . PHP_EOL;
}

callback, как я понимаю, тут не поможет.

valich ★★★
()

Если же задание на сортировку, тогда наверное через usort

valich ★★★
()
$result = array();
foreach($a as $k => $v)
    $result[] = $b[$k];

echo join(' ', $result);

Если я правильно задачу понял.

KRoN73 ★★★★★
()
Ответ на: комментарий от valich

> Хороший программист должен понимать заказчика с полуслова :)

хороший заказчик должен платить достаточно, чтобы возникало желание понимать его с полуслова ;)

arsi ★★★★★
()
Ответ на: комментарий от valich

>Хороший программист должен понимать заказчика с полуслова :)

Хороший программист просто посылает далеко заказчика, не умеющего выдать корректное и однозначное ТЗ :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Действительно, так просто :) Ступил, как обычно...
Спасибо.

moscwich
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.