"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تبديل بنية البيانات العمودية إلى تنسيق قائم على الصف في PHP؟

كيفية تبديل بنية البيانات العمودية إلى تنسيق قائم على الصف في PHP؟

تم النشر بتاريخ 2024-11-08
تصفح:770

How to Transpose a Columnar Data Structure into Row-based Format in PHP?

إعادة ترتيب البيانات العمودية متعددة الأبعاد إلى بنية قائمة على الصفوف

بالنظر إلى مصفوفة ترابطية تحتوي على بيانات موجهة نحو الأعمدة، فإن المهمة هي نقلها إلى مصفوفة متعددة الأبعاد تتكون من صفوف. يتم ترتيب البيانات الموجودة في المصفوفة الأصلية حسب الأعمدة، والهدف هو دمج القيم من نفس العمود في صفوف.

المصفوفة الأصلية:

$where = [
    'id' => [
        12,
        13,
        14
    ],
    'date' => [
        '1999-06-12',
        '2000-03-21',
        '2006-09-31'
    ]
];

الإخراج المطلوب:

$comb = [
    [12, '1999-06-12'],
    [13, '2000-03-21'],
    [14, '2006-09-31']
];

الحل:

إحدى الطرق الفعالة لتحقيق إعادة هيكلة البيانات هذه هي التكرار من خلال قيم كل عمود باستخدام حلقة ودمجها في مصفوفة لكل منها صف. إليك مثال:

$result = [];

foreach ($where['id'] as $key => $id) {
    $result[] = [$id, $where['date'][$key]];
}

النهجarray_column():

البديل الأنيق للحل القائم على الحلقة هو استخدام الدالة array_column()، التي تستخرج عمودًا محددًا من عمود متعدد الأبعاد array.

$result = [];

foreach ($where['id'] as $key => $id) {
    $result[] = array_column($where, $key);
}
ترجع الدالة array_column() العمود المحدد كمصفوفة، والتي يمكن بعد ذلك دمجها مع القيم من الصف المقابل.

الإخراج:

سينتج كلا الحلين المخرجات المطلوبة:

[ [12، '12/06/1999']، [13، '2000/03/21']، [14، '2006/09/31'] ]
            
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3