المشكلة ان أحدها يختص بالقيم الخاطئة Invalid وهي EXTR_PREFIX_INVALID ولم أستطع أن أحصرها .. أعتقد أن جزءاً منها الأرقام .. لكن ليس لدي علم ما عمل الدالة في كل حالاتها .. وكذلك EXTR_PREFIX_IF_EXISTS لم أفهم ما الفرق بينها وبين EXTR_PREFIX_SAME ..
وكذلك لم أفهم المطلوب بالضبط في EXTR_REFS ..
في الحقيقة بسبب ضيق الوقت لم أحاول أكثر مما حاولت .. لكن كل فترة إن شاء الله بتفشش في هالموضوع من الملل من الدراسة ..
المشكلة ان أحدها يختص بالقيم الخاطئة Invalid وهي EXTR_PREFIX_INVALID ولم أستطع أن أحصرها .. أعتقد أن جزءاً منها الأرقام .. لكن ليس لدي علم ما عمل الدالة في كل حالاتها .. وكذلك EXTR_PREFIX_IF_EXISTS لم أفهم ما الفرق بينها وبين EXTR_PREFIX_SAME ..
وكذلك لم أفهم المطلوب بالضبط في EXTR_REFS ..
في الحقيقة بسبب ضيق الوقت لم أحاول أكثر مما حاولت .. لكن كل فترة إن شاء الله بتفشش في هالموضوع من الملل من الدراسة ..
منتظر إكمال حل الدالة ..
تحياتي، أشرف السمهوري
جميل اخي اشرف انا ساحفظ الدالة التي عملتها اذا وجدت وقت ساكملها ان شاء الله
if (!is_array($var_array) OR $extract_type AND !in_array($extract_type, array(EXTR_OVERWRITE, EXTR_SKIP, EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID, EXTR_IF_EXISTS, EXTR_PREFIX_IF_EXISTS))) return false;
foreach ($var_array AS $key => $value) { if (is_array($var_array["$key"])) { extract_alt($var_array["$key"], $extract_type, $prefix) } else { switch ($extract_type) { case EXTR_OVERWRITE: $GLOBALS["$key"] = $value; $count++; break; case EXTR_SKIP: if (!isset($GLOBALS["$key"])) { $GLOBALS["$key"] = $value; $count++; } break; case EXTR_PREFIX_SAME: if (isset($GLOBALS["$key"])) { $GLOBALS[$prefix . '_' . $key] = $value; } else { $GLOBALS["$key"] = $value; } $count++; break; case EXTR_PREFIX_ALL: $GLOBALS[$prefix . '_' . $key] = $value; $count++; break; case EXTR_PREFIX_INVALID: // I don't know how that works! break; case EXTR_IF_EXISTS: if (isset($GLOBALS["$key"])) { $GLOBALS["$key"] = $value; $count++; } break; case EXTR_PREFIX_IF_EXISTS: if (isset($GLOBALS["$key"])) { $GLOBALS[$prefix . '_' . $key] = $value; $count++; } break; case EXTR_REFS: $GLOBALS["$key"] =& $var_array["$key"]; $count++; break; } } }
if (!is_array($var_array) OR $extract_type AND !in_array($extract_type, array(EXTR_OVERWRITE, EXTR_SKIP, EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID, EXTR_IF_EXISTS, EXTR_PREFIX_IF_EXISTS)))
return false;
foreach ($var_array AS $key => $value)
{
if (is_array($var_array["$key"]))
{
extract_alt($var_array["$key"], $extract_type, $prefix)
}
else
{
switch ($extract_type)
{
case EXTR_OVERWRITE:
$GLOBALS["$key"] = $value;
$count++;
break;
case EXTR_SKIP:
if (!isset($GLOBALS["$key"]))
{
$GLOBALS["$key"] = $value;
$count++;
}
break;
case EXTR_PREFIX_SAME:
if (isset($GLOBALS["$key"]))
{
$GLOBALS[$prefix . '_' . $key] = $value;
}
else
{
$GLOBALS["$key"] = $value;
}
$count++;
break;
case EXTR_PREFIX_ALL:
$GLOBALS[$prefix . '_' . $key] = $value;
$count++;
break;
case EXTR_PREFIX_INVALID:
if(preg_match( '#^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$#', $key ))
{
$GLOBALS[$prefix . '_' . $key] = $value;
}
break;
case EXTR_IF_EXISTS:
if (isset($GLOBALS["$key"]))
{
$GLOBALS["$key"] = $value;
$count++;
}
break;
case EXTR_PREFIX_IF_EXISTS:
if (isset($GLOBALS["$key"]))
{
$GLOBALS[$prefix . '_' . $key] = $value;
$count++;
}
break;
case EXTR_REFS:
$GLOBALS["$key"] =& $var_array["$key"];
$count++;
break;
}
}
}
يا لدلاختي
عدت للمانيوال وعندما فتحت صفحة extract اكتشفت أنك لاتستطيع أن تقوم بعمل flag أكثر من مرة سوى مع EXTR_REFS فقط
يعني
EXTR_OVERWRITE | EXTR_REFS
EXTR_PREFIX_ALL | EXTR_REFS
EXTR_PREFIX_INVALID | EXTR_REFS
بالتالي لاتستطيع عمل ذلك
EXTR_PREFIX_INVALID | EXTR_PREFIX_ALL
EXTR_OVERWRITE | EXTR_PREFIX_ALL | EXTR_SKIP
إلخ
وهذا تعديلي الكامل والنهائي لدالة extract بإذن الله وأي خطأ آخر بلغوني: