【问题标题】:Get all arrays in between two elements in a multidimensional array PHP获取多维数组PHP中两个元素之间的所有数组
【发布时间】:2020-06-08 11:40:43
【问题描述】:

我需要帮助。我有一个 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"
        }
 ]
]

【问题讨论】:

  • 这是否完全代表真实数据?看起来您只需要删除两个子数组。这是真的吗?更重要的是,您认为为什么需要执行此数据突变?您不知道您将定位哪些str 值吗?
  • Credit Agreements Summary 子数组之前是否有任何元素? Credit Agreements 子数组之后是否有任何元素?您的示例数据未阐明您的逻辑要求。
  • 很抱歉尚未回复,您看到的此回复是按坐标提取的 pdf 数据。我只想获取信用协议摘要和信用协议之间的数据。所以是的,这两个元素之前和之后都有数据,实际上是大量的。所以我在这一步中还没有针对 str ,我只想让两个元素之间的所有数组分别成为一个数组。谢谢

标签: php arrays laravel multidimensional-array foreach


【解决方案1】:

如果“信用协议摘要”和“信用协议”始终是第一项和最后一项,您可以这样做:

$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;
    }
}

基本上只是迭代数据,在到达起始标记后开始将项目复制到新数组中,并在到达结束标记时停止迭代。

【讨论】:

  • 谢谢你,你的第二种方法让我走上了正轨,我必须先带这个:if (trim(strtolower($c['str'])) == 'credit agreements summary') { $copy = true; } 第二个:if (trim(strtolower($c['str'])) == 'credit agreements') { $copy = false; break; },最后是if ($copy) { $result[] = $c; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2013-09-26
  • 2012-05-03
相关资源
最近更新 更多