كيف يمكنني استخدام مجموعة المراجع داخل المصفوفات في PHP؟
-
08-07-2019 - |
سؤال
وأريد أن أكون قادرة على القيام بما يلي:
$normal_array = array();
$array_of_arrayrefs = array( &$normal_array );
// Here I want to access the $normal_array reference **as a reference**,
// but that doesn't work obviously. How to do it?
end( $array_of_arrayrefs )["one"] = 1; // choking on this one
print $normal_array["one"]; // should output 1
والتحيات
و/ R
المحلول
وend()
لا يرجع إشارة من القيمة الأخيرة، ولكن بدلا من القيمة الأخيرة نفسها. هنا هو الحل:
$normal_array = array();
$array_of_arrayrefs = array( &$normal_array );
$refArray = &end_byref( $array_of_arrayrefs );
$refArray["one"] = 1;
print $normal_array["one"]; // should output 1
function &end_byref( &$array ) {
$lastKey = end(array_keys($array));
end($array);
return $array[$lastKey];
}
نصائح أخرى
وهنا زوجين من النهج، لا هذا ولا ذاك الذي أجد مرضية للغاية. أنا متأكد من أن هناك طريقة أفضل ..
<?php
$normal_array = array();
$array_of_arrayrefs = array( "blah", &$normal_array );
foreach ($array_of_arrayrefs as &$v);
$v["one"] = 1;
echo $normal_array["one"]; //prints 1
?>
<?php
$normal_array = array();
$array_of_arrayrefs = array( "blah", &$normal_array );
$lastIndex = @end(array_keys($array_of_arrayrefs)); //raises E_STRICT because end() expects referable.
$array_of_arrayrefs[$lastIndex]["one"] = 1;
echo $normal_array["one"]; //prints 1
?>
وأنت ربما لا ينبغي أن يمر بالإشارة في المقام الأول. وهو يعتبر عموما ممارسة سيئة للقيام بذلك، لأنه يجعل من الصعب رؤية أين يحصل تعديل للدولة.
وانها فكرة خاطئة مفادها أن الإشارات جدا أسرع. هذا ليس هو الحال - في الواقع، فهي أبطأ قليلا، ولكن من قبل مثل هذا المبلغ صغير، وأنه حقا لا يهم. PHP لديها نظام يسمى النسخ عند الكتابة، وهو ما يعني أن المتغيرات لا يتم نسخ في الواقع، قبل أن تكتب لهم.
والمكان الوحيد الذي كنت حقا بحاجة المراجع، وكان في PHP4، حيث سيحصل على استنساخ كائنات غير ذلك. ليست هناك حاجة هذا في PHP5.
ونهاية وظيفة () لا فقط بإرجاع قيمة. وهو يتحرك أيضا المؤشر الداخلي الصفيف. ثم يمكننا استخدام المفتاح () للحصول على مؤشر، وبعد ذلك نحن قادرون على استخدام الوصول مجموعة منتظمة لهذه المهمة.
$normal_array = array();
$array_of_arrayrefs = array( &$normal_array );
end($array_of_arrayrefs);
$array_of_arrayrefs[ key($array_of_arrayrefs) ]["one"] = 1;
print $normal_array["one"];
والخط:
<اقتباس فقرة>ونهاية ($ array_of_arrayrefs) [ "واحد"] = 1؛ // الاختناق على هذا واحد
اقتباس فقرة>ويلقي خطأ تحليل:
<اقتباس فقرة>وخطأ تحليل: خطأ لغوي، وغير متوقع '[' في /file.php على خط 65
اقتباس فقرة> تأكد من أنك قمت error_reporting
وdisplay_error
تفعيلها.
ولست متأكدا ما تريد القيام به ولكن هذا يعمل:
$normal_array = array();
$array_of_arrayrefs = array( &$normal_array );
// Here I want to access the $normal_array reference **as a reference**,
// but that doesn't work obviously. How to do it?
$array_of_arrayrefs[0]["one"] = 1;
//end($array_of_arrayrefs )["one"] = 1; // choking on this one
print $normal_array["one"]; // should output 1