如何通过比较删除特定索引

我想通过比较删除一些索引,但这并不容易


第一个我们的 php 版本是 5,例如我的结果是这样的,它是 json_encode 的回显,它是数组,数据是动态的


[

        {

            "idx": "1",

            "mom_member_idx": "1",

            "teacher_member_idx": "2",

            "care_start_datetime": "2019-09-09 08:30:00",

         },


        {

            "idx": "2",

            "mom_member_idx": "1",

            "teacher_member_idx": "2",

            "care_start_datetime": "2019-09-10 08:30:00",

         },

         {

            "idx": "3",

            "mom_member_idx": "2",

            "teacher_member_idx": "2",

            "care_start_datetime": "2019-09-09 08:30:00",

         }


]

我想要这样的结果与最新的比较和取消设置


[

        {

            "idx": "1",

            "mom_member_idx": "1",

            "teacher_member_idx": "2",

            "care_start_datetime": "2019-09-09 08:30:00",

         },

         {

            "idx": "3",

            "mom_member_idx": "2",

            "teacher_member_idx": "2",

            "care_start_datetime": "2019-09-09 08:30:00",

         }


]

我试过这样,但它不工作


while ($r = mysqli_fetch_assoc($chat_list)) {

    $dbdata[] = $r;

}

for($r=0;$r<sizeof($dbdata);$r++){

    if ($dbdata[$r]['mom_member_idx']+$dbdata[$r]['teacher_member_idx']==$dbdata[$r+1]['mom_member_idx']+$dbdata[$r+1]['teacher_member_idx'])

    {

        if($dbdata[$r]['care_start_datetime']<$dbdata[$r+1]['care_start_datetime']){

            unset($dbdata[$r]);

        }else {

            unset($dbdata[$r+1]);

        }

    }

}


慕娘9325324
浏览 166回答 3
3回答

慕婉清6462132

首先,将您的 JSON 数组转换为 PHP 数组。然后您可以使用数组索引删除数组元素$someArray = json_decode($someJSON, true);

明月笑刀无情

您可以care_start_datetime使用usort()和unset对数据进行排序的第一个索引形式按降序对数据进行排序。代码示例:$data = json_decode('[&nbsp; &nbsp; {"idx": "1","mom_member_idx": "1","teacher_member_idx": "2","care_start_datetime": "2019-09-09 08:30:00"},&nbsp; &nbsp; {"idx": "2","mom_member_idx": "1","teacher_member_idx": "2","care_start_datetime": "2019-09-10 08:30:00"},&nbsp; &nbsp; {"idx": "3","mom_member_idx": "2","teacher_member_idx": "2","care_start_datetime": "2019-09-09 08:30:00"}]', true);usort($data, function($a, $b) {&nbsp;&nbsp; &nbsp; return strtotime($a['care_start_datetime']) > strtotime($b['care_start_datetime']) ? -1 : 1;&nbsp;});unset($data[0]);print_r($data);

大话西游666

您对列求和的变体并不完全正确,因为某些整数的总和会给您错误的结果,您可能会意外删除错误的结果。喜欢2 + 3 == 1 + 4不正确。也许该代码可以帮助您:$groupedData = array();while ($r = mysqli_fetch_assoc($chat_list)) {&nbsp; &nbsp; // We create unique key for group same rows&nbsp; &nbsp; // (with the same 'mom_member_idx' and 'teacher_member_idx')&nbsp; &nbsp; $uniqueKey = implode('_', [$r['mom_member_idx'], $r['teacher_member_idx']]);&nbsp; &nbsp; if (!array_key_exists($uniqueKey, $groupedData)) {&nbsp; &nbsp; &nbsp; &nbsp; $groupedData[$uniqueKey] = array();&nbsp; &nbsp; }&nbsp; &nbsp; // Add row to grouped array by our unique key&nbsp; &nbsp; $groupedData[$uniqueKey][] = $row;}$result = array();foreach ($groupedData as $rows) {&nbsp; &nbsp; // If in grouped array with that unique key only one row - just add it&nbsp; &nbsp; if (count($rows) <= 1) {&nbsp; &nbsp; &nbsp; &nbsp; $result[] = $rows[0];&nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; }&nbsp; &nbsp; // Go for all same rows and check date&nbsp; &nbsp; $neededRow = null;&nbsp; &nbsp; foreach ($rows as $row) {&nbsp; &nbsp; &nbsp; &nbsp; // Here I don't understand what kind of date do you want - minimum or maximum&nbsp; &nbsp; &nbsp; &nbsp; // You just can reverse the sign&nbsp; &nbsp; &nbsp; &nbsp; if (&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; is_null($neededRow) ||&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strtotime($row['care_start_datetime']) > strtotime($neededRow['care_start_datetime'])&nbsp; &nbsp; &nbsp; &nbsp; ) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $neededRow = $row&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; if ($neededRow) {&nbsp; &nbsp; &nbsp; &nbsp; $result[] = $neededRow;&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP