Saturday, April 28, 2012

Is it possible to pass array keys by reference using PHP's native foreach control structure?

Answer: No. However, you can have by ref access to an array's keys using the following code:
<?php
ArrayUtil::ForEachFn($array, function (&$key, &$value) {
    // YOUR CODE HERE
});
To use this technique in your project simply add the following class:
<?php
class ArrayUtil
{
    public static function ForEachFn(Array &$array, $fn)
    {
        $newArray = array();
        foreach ($array as $key => $value)
        {
            $fn($key, $value);
            $newArray[$key] = $value;
        }
        $array = $newArray;
    }
}
To see it all in action checkout the following example:
<?php
// EXAMPLE ARRAY
$array = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3',
);

// BEFORE
print_r($array);

// EXAMPLE USAGE
ArrayUtil::ForEachFn($array, function (&$key, &$value) { // NOTE THE FUNCTION'S SIGNATURE (USING & FOR BOTH $key AND $value)
    if ($key === 'key2')
    {
        $key = 'BY REF KEY EXAMPLE'; // THIS IS THE WHOLE POINT OF THIS POST
    }
    if ($value === 'value2')
    {
        $value = 'BY REF VALUE EXAMPLE';
    }
});

// AFTER
print_r($array);

/* THE ABOVE "EXAMPLE USAGE" OUTPUTS:
Array
(
    [key1] => value1
    [key2] => value2
    [key3] => value3
)
Array
(
    [key1] => value1
    [BY REF KEY EXAMPLE] => BY REF VALUE EXAMPLE
    [key3] => value3
)
*/

Looking for a cloud-based catalog and CRM platform? Checkout http://rocware.com/

2 comments:

  1. Have you been thinking about the power sources and the tiles whom use blocks I wanted to thank you for this great read!! I definitely enjoyed every little bit of it and I have you bookmarked to check out the new stuff you post. web designing course in jalandhar

    ReplyDelete
  2. شركتنا من المتميزون في اعمال الاصلاح بدون هدم او تكسير من خلال شركة ركن البيت التي تقدم الكثير والكثير في عمل اللازم وتصحيح الاخطاء التي تسببها تسريبات المياه فنحن مثلا

    شركة كشف تسربات المياه بجدة تقدم خدمة لعمل الاصلاح بدون اي خراب ونقدم النصيحة للعملاء بالابتعاد عن الاعمال التي تؤدي الي هذا الخراب فتعاملك مع شركة كشف تسربات بجدة لديها الخبرة الكافية تساعدك في الحفاظ علي منزلك كما اننا نتمكن في اننا سوف نرتقي بخدمة لاننا نقوم بالعمل السليم لها كما يوجد لدينا خدمات العوازل التي تمنع التسريبات من الاسقف لكم والحوائط والخزانات من خلال شركة تسمي الاولي في مجالها لذلك نحن نقدم شركة عزل خزانات بالرياض التي تعتبر في عل الخزانات الارضية من الداخل بواسطة مواد متميزة كما نقدم لكم شركة عزل اسطح بالرياض لعمل العوازل التي تمنع جميع التسريبات في الاسقف

    ReplyDelete

About Me

My photo
I code. I figured I should start a blog that keeps track of the many questions and answers that are asked and answered along the way. The name of my blog is "One Q, One A". The name describes the format. When searching for an answer to a problem, I typically have to visit more than one site to get enough information to solve the issue at hand. I always end up on stackoverflow.com, quora.com, random blogs, etc before the answer is obtained. In my blog, each post will consist of one question and one answer. All the noise encountered along the way will be omitted.