簡體   English   中英

在PHP中過濾為多維數組

[英]Filter into a multidimensional array in PHP

我有這個數組:

$bookings[] = array(
    'booking_id' => '1', 
    'client_firstname' => 'Gareth', 
    'days' => array(
        array('day_id' => '2016-11-23,2016-11-24', 'room_id' => '2'),
        array('day_id' => '2016-11-25', 'room_id' => '4'),
        array('day_id' => '2016-11-26,2016-11-27,2016-11-28', 'room_id' => '2'),
    )
);
$bookings[] = array(
    'booking_id' => '2', 
    'client_firstname' => 'James', 
    'days' => array(
        array('day_id' => '2016-11-25,2016-11-26,2016-11-27,2016-11-28', 'room_id' => '5')
    )
);
$bookings[] = array(
    'booking_id' => '2', 
    'client_firstname' => 'Marco', 
    'days' => array(
        array('day_id' => '2016-11-24', 'room_id' => '5')
    )
);

我怎樣才能循環到這個以獲取具有days[]第一項的項目等於當前日期或我想要的日期?

例如,如果我們是2016-11-23 ,我需要將第一個項目放入數組中:

$bookings[] = array(
    'booking_id' => '1', 
    'client_firstname' => 'Gareth', 
    'days' => array(
        array('day_id' => '2016-11-23,2016-11-24', 'room_id' => '2')
    )
);

因為在days數組中,它從我搜索2016-11-23的日期開始。

謝謝。

您的要求有點不清楚,但array_filter就是您想要的。 它需要一個回調函數,您可以使用它來查詢外部數組中的每個項目。 如果從此函數返回一些真實的東西,則數組項將包含在已過濾的數組中。 如果返回虛假內容,則數組項將從過濾后的數組中排除。

根據我認為你的要求,下面的粗略例子。 如果它錯了,它應該給你正確的想法來調整它。

<?php
$filtered = array_filter($bookings, function($item) {
        $days = explode(',', $item['days'][0]['day_id']);

        return $days[0] == '2016-11-23';
});

var_dump($filtered);

我建議你也加入一些健全性檢查,以避免數據不良時出錯。

這將使預訂數組與您提供的日期相匹配

<?php
    $day_value = '2016-11-23';
    $bookings_ = array();
    foreach($bookings as $b){
        foreach($b['days'] as $day){
           if(in_array($day_value,explode(',',$day['day_id']))){
             $bookings_[]  = $b;
           }
        }
    }
    var_dump($bookings_);

暫無
暫無

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

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