I have an array with keys, I want to filter the array with multiple keys,
I want filter the array upload_wire,ticker,exchnage and Price and etc Here the array
[23] => Array
(
[serial] => 236
[upload_wire] => iHub
[ticker] => PJET
[exchange] => OTC
[price] => 0.0022
[displayPrice] => $0.0022
[MarketCapFloat] => 1655072.6148
[MarketCapString] => 1.655M
[title] => WCVC Announces Continued EVERx CBD Sports Water Sales Growth
[TimeFound] => 11:19:26 PM EST
[DateFound] => Apr 29, 2019
[url] =>
[KeyWordsList] => {'Share': 30, 'Convert': 1, '$': 20, 'Data': 21, 'Order': 8, 'Right': 4, 'Operate': 5, 'Phase': 1, 'Result': 9, 'Agree': 2, 'Sale': 5, 'Select': 7, 'Grow': 6, 'Crypto': 5, 'Test': 8, 'Profit': 1, 'Develop': 1, 'Produce': 1, 'Make': 2, 'Enter': 5, 'Introduce': 1, 'Cannabis': 4, 'Partner': 4, 'New': 53, 'Increase': 1, 'Priority': 6, 'Research': 1, 'Made': 1}
[timestamp] => 1556597966
[currentPrice] => 0
[openPrice] => 0.0007
[previousClose] => 0.0007
[netChange] => 0.0000
[bid] => 0.0006
[bidSize] => 5020000
[ask] => 0.0008
[askSize] => 10000
[marketTire] => N
[cumulativeVolume] => 0
[otc_CumulativeVolume] => 2372789
),
[29] => Array
(
[serial] => 344
[upload_wire] => GNW
[ticker] => ANF
[exchange] => NYSE
[price] => 28.97
[displayPrice] => $28.97
[MarketCapFloat] => 1976000000.0
[MarketCapString] => 1.976B
[title] => Abercrombie & Fitch Introduces Limited-Edition Fierce Fragrance Bottle Featuring International Football Star Romelu Lukaku NYSE:ANF
[TimeFound] => 11:13:22 PM EST
[DateFound] => Apr 29, 2019
[url] =>
[KeyWordsList] => {'Share': 8, 'Reveal': 1, 'Platform': 1, 'Customer': 1, 'Launch': 3, 'Transaction': 1, 'Design': 1, '$': 49, 'Data': 5, 'Right': 2, 'Team': 1, 'Operate': 1, 'Result': 1, 'Worldwide': 1, 'Select': 14, 'Success': 2, 'Exclusive': 1, 'Sign': 3, 'Positive': 1, 'Test': 1, 'Sell': 2, 'Sharing': 1, 'Produce': 1, 'Make': 2, 'Enter': 1, 'Introduce': 4, 'Partner': 1, 'Strength': 4, 'Promise': 1, 'Distribute': 2, 'New': 25, 'License': 2, 'Made': 2}
[timestamp] => 1556597602
[currentPrice] => 0
[openPrice] => 14.73
[previousClose] => 14.61
[netChange] => 0.17
[bid] => 14.6
[bidSize] => 2
[ask] => 15.24
[askSize] => 1900
[marketTire] => A
[cumulativeVolume] => 5816473
[otc_CumulativeVolume] => 2760233
)
[30] => Array
(
[serial] => 275
[upload_wire] => GNWOTC
[ticker] => ATIXF
[exchange] => NASDAQ
[price] => 0.268
[displayPrice] => $0.268
[MarketCapFloat] => 18822118.916
[MarketCapString] => 18.822M
[title] => AnalytixInsight Reports Annual 2018 Financial Results TSX Venture Exchange:ALY
[TimeFound] => 11:13:17 PM EST
[DateFound] => Apr 29, 2019
[url] =>
[KeyWordsList] => {'Share': 7, 'Reduce': 1, 'Platform': 4, 'Strong': 1, 'Customer': 8, 'Launch': 4, 'Transaction': 4, 'Collaborate': 1, 'Design': 1, 'Secondary': 1, '$': 61, 'Improve': 3, 'Data': 8, 'Order': 1, 'Right': 1, 'Operate': 6, 'Result': 12, 'Worldwide': 3, 'Agree': 5, 'Select': 16, 'Success': 6, 'Grow': 3, 'Major': 1, 'Strategic': 2, 'Sign': 3, 'Merge': 1, 'Test': 1, 'Develop': 13, 'Provide': 7, 'Produce': 1, 'Make': 2, 'Enter': 5, 'Partner': 2, 'Promise': 1, 'Distribute': 8, 'New': 26, 'Increase': 4, 'License': 2, 'Research': 9, 'Client': 2, 'Achieve': 2, 'Made': 1}
[timestamp] => 1556597597
[currentPrice] => 0
[openPrice] => 0.2773
[previousClose] => 0.273
[netChange] => -0.02738
[bid] => 0.2627
[bidSize] => 2500
[ask] => 2.64
[askSize] => 100
[marketTire] => D
[cumulativeVolume] => 0
[otc_CumulativeVolume] => 900
)
I Have tried with below code, Now I want filter with Multiple keys for expample, Exchange and Price, I want to filter OTC and NYSE
function filter_by_value ($array, $index, $value){
if(is_array($array) && count($array)>0)
{
foreach(array_keys($array) as $key){
$temp[$key] = $array[$key][$index];
if ($temp[$key] == $value){
$newarray[$key] = $array[$key];
}
}
}
return $newarray;
}
$nResult = filter_by_value ($nResult, 'exchange', 'OTC');
Excepted Result
[23] => Array
(
[serial] => 236
[upload_wire] => iHub
[ticker] => PJET
[exchange] => OTC
[price] => 0.0022
[displayPrice] => $0.0022
[MarketCapFloat] => 1655072.6148
[MarketCapString] => 1.655M
[title] => WCVC Announces Continued EVERx CBD Sports Water Sales Growth
[TimeFound] => 11:19:26 PM EST
[DateFound] => Apr 29, 2019
[url] =>
[KeyWordsList] => {'Share': 30, 'Convert': 1, '$': 20, 'Data': 21, 'Order': 8, 'Right': 4, 'Operate': 5, 'Phase': 1, 'Result': 9, 'Agree': 2, 'Sale': 5, 'Select': 7, 'Grow': 6, 'Crypto': 5, 'Test': 8, 'Profit': 1, 'Develop': 1, 'Produce': 1, 'Make': 2, 'Enter': 5, 'Introduce': 1, 'Cannabis': 4, 'Partner': 4, 'New': 53, 'Increase': 1, 'Priority': 6, 'Research': 1, 'Made': 1}
[timestamp] => 1556597966
[currentPrice] => 0
[openPrice] => 0.0007
[previousClose] => 0.0007
[netChange] => 0.0000
[bid] => 0.0006
[bidSize] => 5020000
[ask] => 0.0008
[askSize] => 10000
[marketTire] => N
[cumulativeVolume] => 0
[otc_CumulativeVolume] => 2372789
),
[29] => Array
(
[serial] => 344
[upload_wire] => GNW
[ticker] => ANF
[exchange] => NYSE
[price] => 28.97
[displayPrice] => $28.97
[MarketCapFloat] => 1976000000.0
[MarketCapString] => 1.976B
[title] => Abercrombie & Fitch Introduces Limited-Edition Fierce Fragrance Bottle Featuring International Football Star Romelu Lukaku NYSE:ANF
[TimeFound] => 11:13:22 PM EST
[DateFound] => Apr 29, 2019
[url] =>
[KeyWordsList] => {'Share': 8, 'Reveal': 1, 'Platform': 1, 'Customer': 1, 'Launch': 3, 'Transaction': 1, 'Design': 1, '$': 49, 'Data': 5, 'Right': 2, 'Team': 1, 'Operate': 1, 'Result': 1, 'Worldwide': 1, 'Select': 14, 'Success': 2, 'Exclusive': 1, 'Sign': 3, 'Positive': 1, 'Test': 1, 'Sell': 2, 'Sharing': 1, 'Produce': 1, 'Make': 2, 'Enter': 1, 'Introduce': 4, 'Partner': 1, 'Strength': 4, 'Promise': 1, 'Distribute': 2, 'New': 25, 'License': 2, 'Made': 2}
[timestamp] => 1556597602
[currentPrice] => 0
[openPrice] => 14.73
[previousClose] => 14.61
[netChange] => 0.17
[bid] => 14.6
[bidSize] => 2
[ask] => 15.24
[askSize] => 1900
[marketTire] => A
[cumulativeVolume] => 5816473
[otc_CumulativeVolume] => 2760233
)
1 Answer
You can change the structure you want to filter with
$allowedVals = ['exchange' => ["OTC", "NYSE"], 'price' => [28.97,0.268]];
$result = [];
foreach ($nResult as $key => $value) {
foreach ($allowedVals as $key1 => $value1) {
if (isset($value[$key1]) && count(array_intersect([$value[$key1]], $value1))) {
$result[$key] = $value;
}else{
unset($result[$key]);
}
}
}