是否可以搜索數組鍵?搜索數組中的鍵的一部分 - PHP
比方說,我有以下數組:
$array = array('array_one' => 'a', 'array_two' => 'b', 'three' => 'c');
我只想得到這個數組:
$array = array('array_one' => 'a', 'array_two' => 'b');
所以我想獲取其包含字符串值的每個關鍵密鑰中的'array_'。
謝謝!
是否可以搜索數組鍵?搜索數組中的鍵的一部分 - PHP
比方說,我有以下數組:
$array = array('array_one' => 'a', 'array_two' => 'b', 'three' => 'c');
我只想得到這個數組:
$array = array('array_one' => 'a', 'array_two' => 'b');
所以我想獲取其包含字符串值的每個關鍵密鑰中的'array_'。
謝謝!
您可以使用按鍵array_filter
然後相交:
$validKeys = array_filter(array_keys($array),
function($key) {
return substr($key, 0, 6) === 'array_';
}
);
$array = array_intersect_key($array, array_flip($validKeys));
謝謝!完美的解決方案 – 2013-02-28 15:39:30
不是非常高效......只是爲了創建一個新的按鍵陣列(不需要),加上交叉點而在原始陣列上循環(不需要)... – gremo 2013-02-28 15:45:58
@Gremo:你說的對,*應該*性能在這裏成爲一個問題(大數組),一個foreach會改進它。 – 2013-02-28 15:51:59
我想一個foreach
循環:
$search='_array';
foreach ($array as $k => $v) {
if (strpos($a, $search)!==false) echo "$search is in $k!<br />";
}
要過濾靜態您可以使用array_intersect_key
:
$allowed = array('foo', 'bar');
$filtered = array_intersect_key($array, array_flip($allowed));
你的情況,我認爲你需要循環:
$filtered = array();
foreach($array as $key => $val) {
if(false !== strpos($key, 'array_')) {
$filtered[$key] = $val;
}
}
您可以使用負過濾器來代替:
foreach ($array as $key => $value) {
if (strpos($key, 'array_') !== 0) {
unset($array[$key]);
}
}
注意它修改就地數組。
更新
或者,因爲5.6現在可以使用array_filter
:
$array = array_filter($array, function($value, $key) {
return strpos($key, 'array_') === 0;
}, ARRAY_FILTER_USE_BOTH);
恐怕你必須用foreach循環,尋找鍵值。 – Ghigo 2013-02-28 15:27:38
'preg_grep()'可能會有所幫助,但是當您構建數組時,您可能會更好地重構數組,以使其更適合您的使用方式。 – SDC 2013-02-28 15:34:52