سؤال

كان هذا السؤال في وقت سابق أنه خلص إلى أنه كان الخلل في 5.2.5.حسنا, انها لا تزال مقطوعة في 5.2.6 ، على الأقل بالنسبة لي:

واسمحوا لي أن أعرف إذا كانت مكسورة أو يعمل لك:

$obj = new stdClass();
$obj->{"foo"} = "bar";
$obj->{"0"} = "zero";
$arr = (array)$obj;

//foo -- bar
//0 --    {error: undefined index}
foreach ($arr as $key=>$value){
    echo "$key -- " . $arr[$key] . "\n";
}

أي الطرق إلى "إصلاح" مجموعة بعد أن تم المدلى بها من stdClass?

هل كانت مفيدة؟

المحلول

وبالتأكيد يبدو وكأنه علة لي (PHP 5.2.6).

ويمكنك تحديد مجموعة مثل هذا:

$arr = array_combine(array_keys($arr), array_values($arr));

ولقد قيل في هذا الخطأ تقرير لكن ملحوظ وهمية ك .. . الوثائق يقول :

<اقتباس فقرة>   

والمفاتيح هي متغير العضو   أسماء، مع وجود استثناءات قليلة بارزة:   خصائص صحيح هي غير ممكن؛

نصائح أخرى

قليلا من التجريب يظهر phps الخاصة وظائف لا تستمر هذه fubarity.

function noopa( $a ){ return $a; }
$arr = array_map('noopa', $arr ); 
$arr[0]; # no error! 

هذا في الواقع, فقط يخلق نسخة من المصفوفة و الإصلاح تحدث أثناء النسخ.

في نهاية المطاف, في تصميم الفشل في جميع المجالات ، حاول استخدام array_merge في الطريقة التي كنت تعتقد أنه يعمل على مجموعة مختلطة رقمية سلسلة المفاتيح ؟

جميع العناصر المرقمة الحصول على نسخ بعض على إعادة ترقيم ، حتى لو كان بعض مجرد يحدث أن تكون سلسلة-تغليف-أرقام ، ونتيجة لذلك ، هناك العشرات من البيرة تطبيقات array_merge فقط لحل هذه المشكلة.

عندما php حاولت استنساخ perl و فشل لم إدراك مفهوم المصفوفات و التجزئات كونها متميزة المفاهيم ، بدلا globbed لهم معا في عالمي واحد مظلة.احسنت!.

المقبل خدعة تمكنوا من كسر مساحة المحددات بسبب بعض المشاكل الفنية التي لا لغة أخرى لسبب ما واجه.

وبفضل RoBorg .. لقد اكتشفت للتو ذلك أيضا:)

وهنا حل آخر، ولست متأكدا ما اذا كان أسرع أم لا:

unserialize(serialize($arr));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top