$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 на девственном Си
вручную написать такую функцию на 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 |
Простите, немного не досмотрел.. но смысл тот же :huh:
Спустя 14 часов, 15 минут, 7 секунд (20.06.2012 - 11:33) safiullin.at написал(а):
Вы немного неправильно поняли то, что нужно.
Приведу тогда реальный пример.
В ответ на запрос я получаю такой массив.
Это массив со статусами об отправке сообщений.
Ключ ясное дело - идентификатор сообщения, английское слово справа - это статус сообщения, соответствующего идентификатору слева.
То есть как видите, статус сообщения (слово) может повторяться.
Мне же нужно чтобы вместо английского слова было русское.
Как-то так...
Кстати сменил Версию PHP на 5.3.
Приведу тогда реальный пример.
В ответ на запрос я получаю такой массив.
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 массив - жертва - другой шаблоны.
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
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 написал(а):
функция транскрипции пишется с ней

Спустя 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] => Доставлено
)
_____________
Все программисты — оптимисты: "На этот раз программа обязательно пройдет!", "Я только что нашел последнюю ошибку!".