كيف يمكنني استخدام مجموعة المراجع داخل المصفوفات في PHP؟

StackOverflow https://stackoverflow.com/questions/191883

سؤال

وأريد أن أكون قادرة على القيام بما يلي:

$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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top