هذه المكتبة ليست في التطوير النشط. توفر مكتبات التجميع الأخرى المختلفة معظم الوظائف التي نحتاجها خارج الصندوق.
إصلاحات الأخطاء فقط.
ArrayObject هي مكتبة PHP التي توفر واجهة خفيفة الوزن للعمل بطلاقة مع Array's.
يوفر ArrayObject غلافًا حول نوع array المدمج في PHP والذي يتضمن طرقًا لتصفية العناصر واستردادها ، ويعامل العناصر الفردية ومجموعات كائن نفس كائن.
هذا مفيد بشكل خاص للعمل مع ردود JSON من طلبات API.
يتم استخدام هذه المكتبة من قبل عميل Hyper HTTP لجعل البيانات الاستخراج من الاستجابات بديهية.
composer require rexlabs/array-object <?php
require ' vendor/autoload.php ' ;
use Rexlabs ArrayObject ArrayObject ;
// Initialise from an Array
$ obj = ArrayObject:: fromArray ([...]);
// Initialise from a JSON encoded string
$ obj = ArrayObject:: fromJson ( $ str );
// Output to array
$ arr = $ obj -> toArray ();
// Output to JSON encoded string
$ json = $ obj -> toJson ();تعتمد الأمثلة أدناه على بيانات الإدخال المتابعة.
{
"books" : [
{
"id" : 1 ,
"title" : " 1984 " ,
"author" : " George Orwell "
},
{
"id" : 2 ,
"title" : " Pride and Prejudice " ,
"author" : " Jane Austen "
}
]
} $ obj -> books ; // Instance of ArrayObject
$ obj -> books -> pluckArray ( ' author ' ); // array [ 'George Orwell', 'Jane Austen' ]
$ obj -> pluckArray ( ' books.author ' ); // array [ 'George Orwell', 'Jane Austen' ]
$ obj -> books -> count (); // 2
$ obj -> books -> isCollection (); // true
$ obj -> books [ 0 ]; // Instance of ArrayObject
$ obj -> books [ 0 ]-> isCollection (); // false
$ obj -> books [ 0 ]-> id ; // 1ملاحظة: جميع الأساليب تتعامل بأمان مع علاج عنصر فردي كصفيف.
تتيح لك طريقة get() إحضار قيمة خاصية ما ، وتلقي افتراضي إذا لم تكن القيمة موجودة. كما أنه يدعم العمق الذي يشار إليه مع . :
$ obj -> get ( ' books.0 ' ); // ArrayObject
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> get ( ' books.1.title ' ); // "Pride and Prejudice"
$ obj -> get ( ' books.0.missing ' , ' Default value ' ); // "Default value" يمكنك أيضًا إحضار الخصائص باستخدام بناء جملة الكائن (We Overload __get() لتحقيق ذلك):
$ obj -> books [ 0 ]; // ArrayObject
$ obj -> books [ 0 ]-> title ; // "1984"
$ obj -> books [ 1 ]-> title ; // "Pride and Prejudice"
$ obj -> books [ 0 ]-> missing ; // throws InvalidPropertyException عندما تكون القيمة التي يتم جلبها عن طريق get('some.key') عبارة عن صفيف ، يتم تعبئتها في مثيل ArrayObject . ومع ذلك ، فإن طريقة getRaw() لا تؤدي أي "ملاكمة" على القيمة التي تم إرجاعها.
$ obj -> get ( ' books ' ); // ArrayObject
$ obj -> getRaw ( ' books ' ); // (array)
$ obj -> get ( ' books.0.title ' ); // "1984"
$ obj -> getRaw ( ' books.0.title ' ); // "1984" تتيح لك طريقة set() تعيين خاصية باستخدام ترميز DOT. سيقوم تلقائيًا بإنشاء بنية الصفيف الأساسية:
$ obj -> set ( ' some.deep.key ' , $ value ); // Set nested property
$ obj -> set ( ' some_key ' , $ anotherArrayObject ); // Pass an ArrayObjectInterface as value عندما يتم تمرير علامة $onlyIfExists كما هو true ، فإنها ستضع هذه الخاصية فقط إذا كان المفتاح موجودًا بالفعل.
على غرار get() ولكن سوف يرمي InvalidPropertyException عندما لا يتم العثور على المفتاح.
لاختبار وجود عنصر ما ، استخدم طريقة has() :
$ obj -> has ( ' books ' ); // true
$ obj -> has ( ' books.0.id ' ); // true
$ obj -> has ( ' books.1.name ' ); // false
$ obj -> has ( ' books.5 ' ); // false يمكن أن يتم تحقيق حلقات على مجموعة من خلال تمرير رد اتصال إلى each() :
$ obj -> books -> each ( function ( $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
});
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}إذا كان لديك عنصر واحد ، فهو لا يزال يعمل.
نظرًا لأن ArrayObject تنفذ واجهة Iterator ، يمكنك ببساطة foreach() على الكائن. هذا يعمل مع عناصر أو مجموعات واحدة.
foreach ( $ obj -> books as $ book ) {
echo " ID: { $ book -> id } , title: { $ book -> title }n" ;
}إرجاع مجموعة جديدة تحتوي على الممتلكات المقطوعة.
$ titles = $ obj -> books -> pluck ( ' title ' ); // ArrayObject
$ arr = $ titles -> toArray (); // ['1984', 'Pride and Prejudice'] إرجاع مجموعة جديدة من الممتلكات المقطوعة. يوفر هذا اختصارًا من pluck($key)->toArray() :
$ arr = $ obj -> books -> pluckArray ( ' title ' ); // ['1984', 'Pride and Prejudice'] يمكنك استدعاء العد من أي عقدة:
$ obj -> count (); // 1
$ obj -> books -> count (); // 2
$ obj -> books [ 0 ]-> count (); // 1ملاحظة: عند استدعاء عنصر واحد (أي ليس مجموعة) ، ستعود 1.
إرجاع صحيح عندما تحتوي المجموعة على عنصر واحد على الأقل.
$ obj -> hasItems ();ملاحظة: عند استدعاء عنصر واحد (أي ليس مجموعة) ، ستعود بشكل صحيح
قم بتطبيق رد اتصال ، أو مجموعة من الشروط "حيث" ، وعناصر إرجاع فقط التي تتطابق.
باستخدام رد الاتصال ، كل عنصر هو مثيل ArrayObject:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ( function ( $ book ) {
return $ book -> has ( ' title ' );
});يمكنك أيضًا تحديد قائمة بالشروط باستخدام صفيف:
// Only return items with a title
$ filteredBooksWithTitle = $ obj -> books -> filter ([ " title " => ' 1984 ' ]); يتوفر الحصول على المصفوفة الأصلية عبر طريقة toArray() :
$ obj -> books [ 0 ]-> toArray (); // [ 'id' => 1, 'title' => '1984', 'author' => 'George Orwell' ]
$ obj -> get ( 1 )-> toArray (); // [ 'id' => 2, 'title' => 'Pride and Prejudice', 'author' => 'Jane Austen' ]
$ obj -> books -> toArray (); // [ [ 'id' => 1, 'title' => '1984', 'author' => 'George Orwell' ], [ 'id' => 2, 'title' => 'Pride and Prejudice', 'author' => 'Jane Austen' ] ]
$ obj -> toArray (); // [ 'books' => [ [ 'id' => 1, 'title' => '1984', 'author' => 'George Orwell' ], [ 'id' => 2, 'title' => 'Pride and Prejudice', 'author' => 'Jane Austen' ] ] ] إرجاع سلسلة مشفرة JSON من الصفيف الأساسي:
$ json = $ obj -> toJson (); // '{ "some_prop": [ "val1", "val2" ] }` يحدد ما إذا كانت الصفيف الأساسي عبارة عن مجموعة.
$ obj -> books -> isCollection (); // true
$ obj -> get ( ' books.0 ' )-> isCollection (); // false
$ obj -> isCollection (); // false يضيف عنصرًا واحدًا أو أكثر إلى بداية المجموعة. إذا لم تكن الصفيف حاليًا مجموعة ، فسيتم تحويلها إلى مجموعة مع عنصر واحد.
$ obj -> unshift ( ' value ' )
-> unshift ( ' value1 ' , ' value2 ' , ' value3 ' ); ملاحظة: يمكنك تمرير ArrayObject كقيم.
يسحب العنصر الأول من المجموعة.
إذا لم تكن الصفيف حاليًا مجموعة ، فسيتم تحويلها إلى مجموعة مع عنصر واحد.
$ item = $ obj -> shift (); // ArrayObject يضيف عنصرًا واحدًا أو أكثر إلى نهاية المجموعة. إذا لم تكن الصفيف حاليًا مجموعة ، فسيتم تحويلها إلى مجموعة مع عنصر واحد.
$ obj -> push ( ' value ' )
-> push ( ' value1 ' , ' value2 ' , ' value3 ' ); ملاحظة: يمكنك تمرير ArrayObject كقيم.
يسحب العنصر الأخير من المجموعة.
إذا لم تكن الصفيف حاليًا مجموعة ، فسيتم تحويلها إلى مجموعة مع عنصر واحد.
$ item = $ obj -> pop (); // ArrayObject المساهمات موضع ترحيب ، يرجى تقديم طلب سحب أو إنشاء مشكلة. يجب تنسيق الرمز المقدم باستخدام معايير PSR-1/PSR-2.