php检查以前的数组键值是否与正在检查的当前数组相同

时间:2018-05-02 16:34:16

标签: php arrays

我有一个数组

$results = array(
    array(value => 100, ID => 333, sec => 200),
    array(value => 200, ID => 333, sec => 300),
    array(value => 300, ID => 555, sec => 400),
    array(value => 400, ID => 555, sec => 500),
    array(value => 500, ID => 333, sec => 600)
);

仅当前一个ID与当前数组ID相同时,才通过组合相似的ID来创建新数组。值始终与第一个数组值相同,sec始终与具有相似ID的最后一个数组值相同。

我不知道检查前一个数组ID值的方法与当前检查值的数组相同。希望足够清楚

通过

创建新数组
$display = array();
foreach($results as $value) {
     if(isset($display[$value[ID]])) { 
         $temp = $display[$value[ID]];
         $temp[sec] = $value[sec];
         $display[$value[ID]] = $value;
      } else {
         $display[$value[ID]] = $value;
      }
}

$display = array_values($display);

并且那会创建$ display为

Array
(
    [0] => Array
         (
           [value] => 100
           [ID] => 333
           [sec] => 600
         )
    [1] => Array
         (
           [value] => 300
           [ID] => 555
           [sec] => 500
         )
)

但我想让它成为

Array
(
    [0] => Array
         (
           [value] => 100
           [ID] => 333
           [sec] => 300
         )
    [1] => Array
         (
           [value] => 300
           [ID] => 555
           [sec] => 500
         )
    [2] => Array
         (
           [value] => 500
           [ID] => 333
           [sec] => 600
         )
)

1 个答案:

答案 0 :(得分:1)

这似乎有效

<?php

$results = array(
    array('value' => 100, 'ID' => 333, 'sec' => 200),
    array('value' => 200, 'ID' => 333, 'sec' => 300),
    array('value' => 300, 'ID' => 555, 'sec' => 400),
    array('value' => 400, 'ID' => 555, 'sec' => 500),
    array('value' => 500, 'ID' => 333, 'sec' => 600)
);

$display = array();
foreach($results as $id => $value) {

    if($id>0 AND $display[count($display)-1]['ID'] == $value['ID']) { 
        $display[count($display)-1]['sec'] = $value['sec'];     
    } else {
       $display[] = $value;
    }
}

print_r($display);

结果

Array
(
    [0] => Array
        (
            [value] => 100
            [ID] => 333
            [sec] => 300
        )

    [1] => Array
        (
            [value] => 300
            [ID] => 555
            [sec] => 500
        )

    [2] => Array
        (
            [value] => 500
            [ID] => 333
            [sec] => 600
        )
)