Замена PHP-массивов

70
6

$data = Array ( ['key1'] => 1 , ['key2'] => 20 , ['key3'] => 11)
$key1 = Array (1 => "a" , 2 => "b")
$key2 = Array (1 => "a" , .... 20 => "y")
$key3 = Array (1 => "a" , .... 11 => "n")

что самый простой способ заменить все значения в массиве $ data для возврата:

$data['key1'] = $key1[$data['key1']]

вместо того, чтобы делать это один за другим, то есть:

$data['key1'] = $key1[$data['key1']]
$data['key2'] = $key2[$data['key2']]...

спросил(а) 2013-11-05T16:32:00+04:00 6 лет, 11 месяцев назад
1
Решение
58

Вопрос довольно трудно понять, но я думаю, что вы пытаетесь сделать, это использовать $data для извлечения данных из других массивов. В этом случае это должно работать:

$data = array('key1' => 1, 'key2' => 2, 'key3' => 0);
$key1 = array(1,2,3,4,5);
$key2 = array(6,7,8,9,10);
$key3 = array(11,12,13,14);

foreach(array_keys($data) as $key) {
if(isset($$key)) {
$target = $$key;
$value = $target[$data[$key]];

$data[$key] = $value;
}
}

var_dump($data); #=> [key1 => 2, key2 => 8, key3 => 11]

ответил(а) 2013-11-05T16:39:00+04:00 6 лет, 11 месяцев назад
71

Я думаю, вы ищете это:

foreach($data as $k => &$v)
{
if($$k)
{
$t = $$k;
if($t[$v]) $v = $t[$v];
}
}

print_r($data);

но я бы посоветовал задать себе несколько более сложных вопросов о намерениях здесь

ответил(а) 2013-11-05T16:39:00+04:00 6 лет, 11 месяцев назад
58

я бы предпочел это решение


array_walk(
$data,
function(&$a, $b) {
$a = $$a[$b];
}
);

ответил(а) 2013-11-05T16:49:00+04:00 6 лет, 11 месяцев назад
42

Вы можете попробовать использовать переменные переменных PHP, что-то вроде этого:

foreach ($data as $mkey => $mval)
{
$data[$mkey] = $$mkey[$data[$mkey]];
}

ответил(а) 2013-11-05T16:43:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема