我有一個由 WordPress 插件提供的資料組成的陣列,它看起來像這樣:
array(
[label] => Evening,
[hour] => 15,
[minute] => 00,
[add_time] => enabled,
[zlzkrrwlwchehhtvdnmq_add_date] => 29 November 2022,
[zlzkrrwlwchehhtvdnmq_zoom_id] => null,
[zlzkrrwlwchehhtvdnmq_stock] => null,
[sfujorleiwijcczciess_add_date] => 30 November 2022
)
我想將所有鍵值對保留在陣列中,其中鍵包含“add_date”、“hour”或“minute”,并丟棄其余部分。
保留所有包含“add_date”的鍵都可以正常作業。
if(strpos($key, 'add_date') == 0) {
unset($datesresult[$key]);
}
}
這給了我一個僅包含與日期相關的鍵值對的陣列:
array(
[zlzkrrwlwchehhtvdnmq_add_date] => 29 November 2022,
[sfujorleiwijcczciess_add_date] => 30 November 2022
)
但是,當我嘗試使用 OR 運算子匹配多個條件時,它不起作用。這個:
if(strpos($key, 'add_date') == 0 OR strpos($key, 'hour') == 0 OR strpos($key, 'minute') == 0) {
unset($datesresult[$key]);
}
}
...給了我一個完全空白的陣列。
我也嘗試過各種雙重否定,比如
if(!(strpos($key, 'add_date') == true || strpos($key, 'hour') == true || strpos($key, 'minute') == true)){
unset($datesresult[$key]);
}
}
..但我得到了相同的結果。
我確定我在這里做錯了什么,無論是在語法上(我似乎無法在 PHP 檔案中找到像這樣的條件陳述句中的任何鏈接運算子的示例?)或者在我對真/假的理解上,但我無法弄清楚是什么 - 經過很長時間的編碼后,我的 PHP 生銹得令人難以置信。
任何智慧將不勝感激!
uj5u.com熱心網友回復:
您可以使用preg_matchwhich 搜索字串模式,創建一個簡單的運算式/add_date$|hour$|minute$/并遍歷每個資料并搜索關鍵字串是否與模式不匹配,然后將其從陣列中排除
演示:https ://3v4l.org/oKTeT
<?php
$data = array(
'label' => 'Evening',
'hour' => 15,
'minute' => 00,
'add_time' => 'enabled',
'zlzkrrwlwchehhtvdnmq_add_date' => '29 November 2022',
'zlzkrrwlwchehhtvdnmq_zoom_id' => null,
'zlzkrrwlwchehhtvdnmq_stock' => null,
'sfujorleiwijcczciess_add_date' => '30 November 2022',
);
$pt = '/add_date$|hour$|minute$/';
foreach ($data as $key => $value){
$match = preg_match($pt, $key);
if (!$match) {
unset($data[$key]);
}
}
print_r($data);
uj5u.com熱心網友回復:
可以使用以下代碼獲取結果:
演示代碼
<?php
$array = array(
'label' => 'Evening',
'hour' => 15,
'minute' => 00,
'add_time' => 'enabled',
'zlzkrrwlwchehhtvdnmq_add_date' => '29 November 2022',
'zlzkrrwlwchehhtvdnmq_zoom_id' => null,
'zlzkrrwlwchehhtvdnmq_stock' => null,
'sfujorleiwijcczciess_add_date' => '30 November 2022',
);
var_export(
array_filter(
$array,
function($haystack ) {
if ((is_numeric(strpos($haystack, 'hour'))) || (is_numeric(strpos($haystack, 'minute'))) || (is_numeric(strpos($haystack, 'add_date')))) {
return $haystack;
}
},
ARRAY_FILTER_USE_KEY
)
);
uj5u.com熱心網友回復:
宣告所有允許的子字串的白名單陣列,然后通過將鍵與白名單字串進行比較來過濾您的陣列。
盡早使用條件return以foreach()獲得最佳效率。
代碼:(演示)
$whitelist = ['add_date', 'hour', 'minute'];
var_export(
array_filter(
$array,
function($k) use($whitelist) {
foreach ($whitelist as $string) {
if (str_contains($k, $string)) {
return true;
}
}
return false;
},
ARRAY_FILTER_USE_KEY
)
);
使用白名單陣列可以更輕松地維護代碼。否則,當您想要擴展過濾器邏輯時,您將需要復制值和函式呼叫。
如果你想硬編碼它,那么它看起來像這樣:(演示)
var_export(
array_filter(
$array,
fn($k) => str_contains($k, 'add_date') || str_contains($k, 'hour') || str_contains($k, 'minute'),
ARRAY_FILTER_USE_KEY
)
);
或者,如果您熟悉正則運算式并且不介意將模式硬編碼到您的應用程式中,則可以按使用交替和字串結尾錨點的運算式進行過濾。(演示)
var_export(
array_filter(
$array,
fn($k) => preg_match('/(?:add_date|hour|minute)$/', $k),
ARRAY_FILTER_USE_KEY
)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535723.html
上一篇:正確的功能洗掉特殊字符
下一篇:如何按列名動態應用單元格格式?
