<?php
// look ma no arrays
function getVarName($dsnKey)
{
switch ($dsnKey) {
case 'login':
return 'user';
case 'pass':
return 'password';
}
// эта зубодробительная конструкция влегкую заменяется одним массивом
return null;
}
// нет, в функцию не оформлю, там массив и extract потребуются. либо вообще global.
$dsn = 'login=Admin;;;pass:123123;;some;;var=1234';
while ($dsn) {
if ($pos === false) {
$dsn = false;
} else {
}
$eqSignPos = strpos($chunk, '='); $semicolonPos = strpos($chunk, ':'); $fail = !$eqSignPos && !$semicolonPos; // нам не нужны ни оба false, ни разделителя в начале строки
$fail = $fail || ($eqSignPos > 0 && $semicolonPos > 0); // если у нас два разделителя, то тоже паникуем
if (empty($chunk) || $fail) { continue;
}
$delimPos = max($eqSignPos, $semicolonPos); // чому бы и не $varKey = substr($chunk, 0, $delimPos); $value = substr($chunk, $delimPos + 1); $varName = getVarName($varKey);
if ($varName) {
$$varName = $value;
echo sprintf('Successfully set variable %s (%s) with %s value'.PHP_EOL
, $varKey, $varName, $value); } else {
echo sprintf('Variable %s hasn\'t been set'.PHP_EOL
, $varKey, $varName); }
}
PD9waHAKCi8vIGxvb2sgbWEgbm8gYXJyYXlzCmZ1bmN0aW9uIGdldFZhck5hbWUoJGRzbktleSkKewoJc3dpdGNoICgkZHNuS2V5KSB7CgkJY2FzZSAnbG9naW4nOgoJCQlyZXR1cm4gJ3VzZXInOwoJCWNhc2UgJ3Bhc3MnOgoJCQlyZXR1cm4gJ3Bhc3N3b3JkJzsKCX0KCS8vINGN0YLQsCDQt9GD0LHQvtC00YDQvtCx0LjRgtC10LvRjNC90LDRjyDQutC+0L3RgdGC0YDRg9C60YbQuNGPINCy0LvQtdCz0LrRg9GOINC30LDQvNC10L3Rj9C10YLRgdGPINC+0LTQvdC40Lwg0LzQsNGB0YHQuNCy0L7QvAoJcmV0dXJuIG51bGw7Cn0KCi8vINC90LXRgiwg0LIg0YTRg9C90LrRhtC40Y4g0L3QtSDQvtGE0L7RgNC80LvRjiwg0YLQsNC8INC80LDRgdGB0LjQsiDQuCBleHRyYWN0INC/0L7RgtGA0LXQsdGD0Y7RgtGB0Y8uINC70LjQsdC+INCy0L7QvtCx0YnQtSBnbG9iYWwuCgokZHNuID0gJ2xvZ2luPUFkbWluOzs7cGFzczoxMjMxMjM7O3NvbWU7O3Zhcj0xMjM0JzsKd2hpbGUgKCRkc24pIHsKCSRwb3MgPSBzdHJwb3MoJGRzbiwgJzsnKTsKCWlmICgkcG9zID09PSBmYWxzZSkgewoJCSRjaHVuayA9IHRyaW0oJGRzbik7CgkJJGRzbiA9IGZhbHNlOwoJfSBlbHNlIHsKCQkkY2h1bmsgPSB0cmltKHN1YnN0cigkZHNuLCAwLCAkcG9zKSk7CgkJJGRzbiA9IHRyaW0oc3Vic3RyKCRkc24sICRwb3MgKyAxKSk7Cgl9CgkkZXFTaWduUG9zID0gc3RycG9zKCRjaHVuaywgJz0nKTsKCSRzZW1pY29sb25Qb3MgPSBzdHJwb3MoJGNodW5rLCAnOicpOwoJJGZhaWwgPSAhJGVxU2lnblBvcyAmJiAhJHNlbWljb2xvblBvczsgLy8g0L3QsNC8INC90LUg0L3Rg9C20L3RiyDQvdC4INC+0LHQsCBmYWxzZSwg0L3QuCDRgNCw0LfQtNC10LvQuNGC0LXQu9GPINCyINC90LDRh9Cw0LvQtSDRgdGC0YDQvtC60LgKCSRmYWlsID0gJGZhaWwgfHwgKCRlcVNpZ25Qb3MgPiAwICYmICRzZW1pY29sb25Qb3MgPiAwKTsgLy8g0LXRgdC70Lgg0YMg0L3QsNGBINC00LLQsCDRgNCw0LfQtNC10LvQuNGC0LXQu9GPLCDRgtC+INGC0L7QttC1INC/0LDQvdC40LrRg9C10LwKCWlmIChlbXB0eSgkY2h1bmspIHx8ICRmYWlsKSB7CgkgICAgY29udGludWU7Cgl9CgkkZGVsaW1Qb3MgPSBtYXgoJGVxU2lnblBvcywgJHNlbWljb2xvblBvcyk7IC8vINGH0L7QvNGDINCx0Ysg0Lgg0L3QtQoJJHZhcktleSA9IHN1YnN0cigkY2h1bmssIDAsICRkZWxpbVBvcyk7CgkkdmFsdWUgPSBzdWJzdHIoJGNodW5rLCAkZGVsaW1Qb3MgKyAxKTsKCSR2YXJOYW1lID0gZ2V0VmFyTmFtZSgkdmFyS2V5KTsKCWlmICgkdmFyTmFtZSkgewoJCSQkdmFyTmFtZSA9ICR2YWx1ZTsKCQllY2hvIHNwcmludGYoJ1N1Y2Nlc3NmdWxseSBzZXQgdmFyaWFibGUgJXMgKCVzKSB3aXRoICVzIHZhbHVlJy5QSFBfRU9MLCAkdmFyS2V5LCAkdmFyTmFtZSwgJHZhbHVlKTsKCX0gZWxzZSB7CgkJZWNobyBzcHJpbnRmKCdWYXJpYWJsZSAlcyBoYXNuXCd0IGJlZW4gc2V0Jy5QSFBfRU9MLCAkdmFyS2V5LCAkdmFyTmFtZSk7Cgl9Cn0=