У меня есть эта функция
public function saveVariantValue($id, $data, $langs, $field, $client)
{
$transformation = [];
$parts1 = explode(';', $data[$field][1]);
$parts2 = explode(';', $data[$field][2]);
$tmp_arr = array_map(null, $parts1, $parts2);
$transformation[] = array_map(
function($v) { return array_combine(["1","2"], $v); },
$tmp_arr
);
//here i use the transformation array//
}
функция преобразования входного массива из этого,
[
{
"1": "tag_es1;tag_es2;tag_es3",
"2": "tag_en1;tag_en2;tag_en3"
}
]
в этот
[
{
{
"1" : "tag_es1",
"2" : "tag_en1"
},
{
"1" : "tag_es2",
"2" : "tag_en2"
},
{
"1" : "tag_es3",
"2" : "tag_en3"
}
}
]
каждый 1
и2
представляет идентификатор языка из базы данных. Если вы проверите код, он будет работать только в том случае, если я отправлю оба языка, но в некоторых случаях на основании разрешения пользователя пользователь сможет отправить
[
{
"1": "tag_es1;tag_es2;tag_es3"
}
]
Я хочу, чтобы режим кода был динамическим, поэтому вместо объявления parts1
и parts2
я мог бы создать строку значений и затем вычислить строку, подобную этой,
$str = '';
$eval = '';
foreach($langs as $l) {
//i create the string "variables", the values of the "parts" must be an array, that's why the explode
$str .= 'parts'.$l->id.'='.serialize(explode(";", $variant[$l->id])).';&';
//i need to pass the "parts" to array_map so i create a string to pass it as the function parameters;
$eval .= '$parts'.$l->id.', ';
}
$str = rtrim($str, '&');
$eval = rtrim($eval, ', ');
parse_str($str);
//if i var_dump $parts1 or $parts2 i get the correct values
$tmp_arr = array_map(null, eval($eval));//here i fail
, пока я вызываюarray_map не может выдать syntax error, unexpected end of file
, поэтому возникает вопрос: как я могу заставить этот код работать?и это нормально делать это?Есть ли лучший способ сделать это?