Получить все массивы между двумя элементами в многомерном массиве PHP - PullRequest
0 голосов
/ 24 февраля 2020

Пожалуйста, мне нужна помощь. У меня PHP сложность. Это многомерный массив, и я хочу, чтобы все массивы между массивами «Сводка по кредитным соглашениям» и «Кредитные соглашения» целиком находились в отдельном массиве. Я пытался использовать функцию range (), но ее не получается. Заранее спасибо.

Это пример данных:

[
 [
        {
            "x": 28,
            "y": 119,
            "str": "Credit Agreements Summary",
            "dir": "ltr",
            "width": 160,
            "height": 12,
            "fontName": "g_d101_f412"
        },
        {
            "x": 545,
            "y": 156,
            "str": "Account",
            "dir": "ltr",
            "width": 30,
            "height": 8,
            "fontName": "g_d101_f412"
        },
        {
            "x": 549,
            "y": 166,
            "str": "Status",
            "dir": "ltr",
            "width": 22,
            "height": 8,
            "fontName": "g_d101_f412"
        },
        {
            "x": 490,
            "y": 156,
            "str": "Facility",
            "dir": "ltr",
            "width": 27,
            "height": 8,
            "fontName": "g_d101_f412"
        },
        {
            "x": 479,
            "y": 166,
            "str": "Classification",
            "dir": "ltr",
            "width": 49,
            "height": 8,
            "fontName": "g_d101_f412"
        },
        {
            "x": 434,
            "y": 156,
            "str": "Arrear",
            "dir": "ltr",
            "width": 24,
            "height": 8,
            "fontName": "g_d101_f412"
        },
        {
            "x": 432,
            "y": 166,
            "str": "Amount",
            "dir": "ltr",
            "width": 29,
            "height": 8,
            "fontName": "g_d101_f412"
        },
        {
            "x": 365,
            "y": 156,
            "str": "Instalment",
            "dir": "ltr",
            "width": 40,
            "height": 8.25,
            "fontName": "g_d101_f412"
        },
        {
            "x": 28,
            "y": 126,
            "str": "Credit Agreements",
            "dir": "ltr",
            "width": 104,
            "height": 12,
            "fontName": "g_d101_f412"
        }
 ]
]

1 Ответ

1 голос
/ 24 февраля 2020

Если «Сводка по кредитным соглашениям» и «Кредитные соглашения» всегда будут первым и последним пунктом, вы можете сделать это следующим образом:

$result = array_slice($data[0], 1, -1);

Если это не обязательно так, это немного более сложный. Вот один из способов сделать это:

$result = [];
$copy = false;
foreach ($data[0] as $row) {
    if ($row->str == 'CreditAgreements') {
        break;
    }
    if ($copy) {
        $result[] = $row;
    }
    if ($row->str == 'CreditAgreementsSummary') {
        $copy = true;
    }
}

По сути, просто итерируйте данные, начните копировать элементы в новый массив после достижения начального маркера и остановите итерацию, когда достигнете конечного маркера.

...