[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Заменить в массиве английские значения на русские
safiullin.at
Есть массив, в нем идут идентификаторы, которые нужны для замены в строке. Помимо массива есть строка, где указаны эти идентификаторы, вместо которых php и должен подставить слова соответствующие этим идентификатором в массиве $eng_mass.
$eng_mass = array
(
68678687 => 'english-word1',
68678688 => 'english-word2',
68678689 => 'english-word3'
);
Этот массив приходит в ответ на некий запрос.


Вопрос следующий: Перед заменой в самой строке, как можно вместо английских слов сделать русские?
Я так понимаю нужно создать еще один массив, например:
$replace = array
(
'english-word1' => 'русское-слово1',
'english-word2' => 'русское-слово2',
'english-word2' => 'русское-слово3'
);


Но вот какую функцию или конструкцию использовать для замены именно значений массивов не знаю.
Я надеюсь понятно объяснил. Должно получиться следующее:
$rus_mass = array
(
68678687 => 'русское-слово1',
68678688 => 'русское-слово2',
68678689 => 'русское-слово3'
);
В этом массиве должны быть те же самые идентификаторы, но вместо английских значений этих идентификаторов должны быть русские.



Спустя 43 минуты, 56 секунд (19.06.2012 - 15:58) safiullin.at написал(а):
Ну что, неужели никто не подскажет?

Спустя 48 минут, 51 секунда (19.06.2012 - 16:47) johniek_comp написал(а):
как-то так
$eng_mass = array
(
68678687 => 'english-word1',
68678688 => 'english-word2',
68678689 => 'english-word3'
);
$rus_mass = array
(
68678687 => 'русское-слово1',
68678688 => 'русское-слово2',
68678689 => 'русское-слово3'
);
$array = array_replace($eng_mass, $rus_mass);

Спустя 1 час, 39 минут, 45 секунд (19.06.2012 - 18:27) safiullin.at написал(а):
johniek_comp, у меня почему-то функция array_replace не работает, ошибку выдает. Call to undefined function array_replace()

Спустя 2 минуты, 6 секунд (19.06.2012 - 18:29) medvedeva написал(а):
Цитата
(PHP 5 >= 5.3.0)

Может у Вас не 5.3 ?

Спустя 7 минут, 36 секунд (19.06.2012 - 18:37) safiullin.at написал(а):
Да у меня 5.2.12. Но не хотелось бы из-за этого версию менять. Есть другие способы как можно реализовать вышеописанное мной?

Спустя 29 минут, 6 секунд (19.06.2012 - 19:06) johniek_comp написал(а):
safiullin.at
вручную написать такую функцию на php, или как модуль для php на девственном Си

Спустя 41 минута, 7 секунд (19.06.2012 - 19:47) l@pteff написал(а):

$eng_mass = array
(
68678687 => 'english-word1',
68678688 => 'english-word2',
68678689 => 'english-word3'
);


$replace = array
(
'english-word1' => 'русское-слово1',
'english-word2' => 'русское-слово2',
'english-word3' => 'русское-слово3'
);


$keys=array_keys($eng_mass);
$values=array_values($replace);
$rus_mass=array_combine($keys, $values);
echo "<pre>";
print_r($rus_mass);
echo "</pre>";

Спустя 1 час, 11 минут, 39 секунд (19.06.2012 - 20:59) Nikage написал(а):
Или как-то так..

$eng_mass = array
(
68678687 => 'english-word1',
68678688 => 'english-word2',
68678689 => 'english-word3'
);

$rus_mass = array
(
68678687 => 'русское-слово1',
68678688 => 'русское-слово2',
68678689 => 'русское-слово3'
);


function replace()
{
global $eng_mass;
global $rus_mass;

$eng = array_values($eng_mass);
$rus = array_values($rus_mass);
$replace = array_combine($eng, $rus);
return $replace;
}

$replace = replace();
print_r($replace);

Спустя 19 минут, 46 секунд (19.06.2012 - 21:18) Nikage написал(а):
Цитата (Nikage @ 19.06.2012 - 17:59)
Или как-то так..

$eng_mass = array
(
    68678687 => 'english-word1',
    68678688 => 'english-word2',
    68678689 => 'english-word3'
);

$rus_mass = array
(
    68678687 => 'русское-слово1',
    68678688 => 'русское-слово2',
    68678689 => 'русское-слово3'
);


function replace()
{
    global $eng_mass;
    global $rus_mass;
   
    $eng = array_keys($eng_mass);
    $rus = array_values($rus_mass); 
    $replace = array_combine($eng, $rus);
    return $replace;
}

$replace = replace();
print_r($replace);

Простите, немного не досмотрел.. но смысл тот же :huh:

Спустя 14 часов, 15 минут, 7 секунд (20.06.2012 - 11:33) safiullin.at написал(а):
Вы немного неправильно поняли то, что нужно.
Приведу тогда реальный пример.

В ответ на запрос я получаю такой массив.
Array
(
[
1290872613] => delivered
[1290872614] => delivered
[1290872615] => delivered
[1290873209] => delivered
[1290873773] => delivered
[1290874052] => delivered
[1290874077] => delivered
[1290877804] => delivered
[1290877810] => delivered
[1290877925] => delivered
)


Это массив со статусами об отправке сообщений.
Ключ ясное дело - идентификатор сообщения, английское слово справа - это статус сообщения, соответствующего идентификатору слева.

То есть как видите, статус сообщения (слово) может повторяться.

Мне же нужно чтобы вместо английского слова было русское.

Как-то так...
Array
(
[
enqueued] => Ожидает отправки
[enroute] => В пути
[accepted] => Отправлено
[delivered] => Доставлено
[expired] => Истек срок
[deleted] => Удалено
[undeliverable] => Недоставляемо
[rejected] => Отклонено
[unknown] => Неизвестно
)


Кстати сменил Версию PHP на 5.3.

Спустя 1 час, 32 минуты, 6 секунд (20.06.2012 - 13:06) safiullin.at написал(а):
Ладно, всем спасибо за ответы. Вышел из положения через задницу. Преобразовал массив в строку, затем str_replace'ом заменил значения, и обратно в массив преобразовал.

Спустя 5 минут, 46 секунд (20.06.2012 - 13:11) Игорь_Vasinsky написал(а):
)) а простая strtr() не поможет?
1 массив - жертва - другой шаблоны.

Спустя 25 минут, 8 секунд (20.06.2012 - 13:36) safiullin.at написал(а):
Игорь_Vasinsky, это же для строки функция? я вот только что попробовал, она нифига не меняет массив. Ошибку выдает.

Warning: strtr() expects parameter 1 to be string, array given in \bla\bla\bla\office.php on line 117

Спустя 2 минуты, 6 секунд (20.06.2012 - 13:39) Игорь_Vasinsky написал(а):
да ну)

strtr() может вызываться с двумя аргументами. В этом случае from должен быть массивом (array), в форме array('from' => 'to', ...). 

Спустя 1 минута, 23 секунды (20.06.2012 - 13:40) Игорь_Vasinsky написал(а):
функция транскрипции пишется с ней wink.gif

Спустя 41 минута, 3 секунды (20.06.2012 - 14:21) safiullin.at написал(а):
Игорь_Vasinsky, ну не знаю, в на php.su пример приведен. И там в качестве первого аргумента строка указана.
<?php
$trans = array("hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>

Выводит
hello all, I said hi

Спустя 13 минут, 42 секунды (20.06.2012 - 14:35) safiullin.at написал(а):
То, что массив в качестве второго аргумента указать можно я и так знаю. Но первым то аргументом (то где меняем) все ровно строка идет. А мне нужно изменить массив...

От этого вида:
Array
(
[1290872613] => enqueued
[1290872614] => enroute
[1290872615] => delivered
)

К этому:
Array
(
[1290872613] => Ожидает отправки
[1290872614] => В пути
[1290872615] => Отправлено
)


Спустя 1 день, 49 минут, 47 секунд (21.06.2012 - 15:24) walerus написал(а):
$a = array( '1290872613' => 'enqueued', '1290872614' => 'enroute', '1290872615' => 'delivered' );

function toRus_convert( $array )
{
$replace_rus = array(
'enqueued' => 'Ожидает отправки',
'enroute' => 'В пути',
'accepted' => 'Отправлено',
'delivered' => 'Доставлено',
'expired' => 'Истек срок',
'deleted' => 'Удалено',
'undeliverable' => 'Недоставляемо',
'rejected' => 'Отклонено',
'unknown' => 'Неизвестно',
);


foreach( $array as $array_key => $array_value )
$array[$array_key] = trim( $replace_rus[mb_strtolower( $array_value, 'utf-8' )] );

return $array;
}

print_r( toRus_convert( $a ) );

Результат
Array
(
[1290872613] => Ожидает отправки
[1290872614] => В пути
[1290872615] => Доставлено
)


_____________
Все программисты — оптимисты: "На этот раз программа обязательно пройдет!", "Я только что нашел последнюю ошибку!".
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.