簡體   English   中英

如何在數組中查找特定元素(按上次修改日期和產品ID)?

[英]How to find a specific element in array (by last modification date and product id)?

這是兩個產品的陣列。 它們之間的區別在於價格和最后修改日期。

$array = array(
"0" => array
    (
        "id" => 1,
        "name" => apple,
        "product_price" => 5,
        "date_and_time" => 2017-11-01
    ),

"1" => array
    (
        "id" => 1,
        "name" => apple,
        "product_price" => 6,
        "last_mod_date" => 2017-11-02
    ),

"2" => array
    (
        "id" => 2,
        "name" => orange,
        "product_price" => 4,
        "last_mod_date" => 2017-11-03
    ),

"3" => array
    (
        "id" => 2,
        "name" => orange,
        "product_price" => 3,
        "last_mod_date" => 2017-11-04
    ));

我的問題是如何為最后修改日期具有最大值的數組中的每個產品構建一個新數組? 因此,我需要根據修改日期比較數組中的每個產品,然后將它們推到新的數組中($ products = array();)

所以我想收到一個數組,其中:

  • 價格等於6且日期為2017-11-02的蘋果,因為日期大於價格等於5的日期,
  • 和橙色,其中pice等於三且日期為2017-11-04,因為日期大於價格等於四的日期

在這種情況下,它應類似於:

$products = array(

"0" => array
    (
        "id" => 1,
        "name" => apple,
        "product_price" => 6,
        "last_mod_date" => 2017-11-02
    ),

"1" => array
    (
        "id" => 2,
        "name" => orange,
        "product_price" => 3,
        "last_mod_date" => 2017-11-04
    ));

非常感謝您的支持。

這是一種提供很少的信息或教育價值但利用PHP本機數組功能的方法。

<?php

function getLatestById($id, $data) {

    foreach ($data as $key => $row) {
        $idColumn[$key] = $row['id'];
        $modifiedColumn[$key] = $row['modified'];
    }

    array_multisort($idColumn, SORT_ASC, $modifiedColumn, SORT_DESC, $data);

    $k = array_search(1, array_column($data, 'id'));

    return $data[$k];

}      

$foo = [];
$foo[] = ['id' => 1, 'modified' => '2017-11-01', 'price' => 5];
$foo[] = ['id' => 1, 'modified' => '2017-11-02', 'price' => 6];
$foo[] = ['id' => 2, 'modified' => '2017-11-03', 'price' => 4];
$foo[] = ['id' => 2, 'modified' => '2017-11-04', 'price' => 3];


var_dump(getLatestById($id, $foo));

因此,思路是,按ID排序,然后按修改排序。 獲得排序數組后,您只需按ID捕獲第一個匹配項即可。

對於更說明性的代碼,我可能會寫一個循環,在其中使用ID作為索引填充一個新數組。 將現有值與迭代一次的值進行比較(如果修改為更大(較新),則重寫)。 就像是...

$foo = [];
$foo[] = ['id' => 1, 'modified' => '2017-11-01', 'price' => 5];
$foo[] = ['id' => 1, 'modified' => '2017-11-02', 'price' => 6];
$foo[] = ['id' => 2, 'modified' => '2017-11-03', 'price' => 4];
$foo[] = ['id' => 2, 'modified' => '2017-11-04', 'price' => 3];

$a = [];
foreach ($foo as $k => $v) {
    if (empty($a[$v['id']]) || $a[$v['id']]['modified'] < $v['modified']) {
        $a[$v['id']] = $v;
    }
}

var_dump($a);

或者利用您的數據庫,而不用代碼執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM