我有一个多维数组$currencies
:
$currencies = array (
0 => (object) array( 'name' => 'algo', 'fullName' => 'Algorand'),
1 => (object) array( 'name' => 'ardr', 'fullName' => 'Ardor'),
2 => (object) array( 'name' => 'eth', 'fullName' => 'Eth')
);
我只想保留这个数组中带有name
的对象:
$filter = ["eth", "algo"];
我做了这个,但它不工作。
$currenciesFiltered = array_filter(
$currencies,
function ($value) use ($filter) {
return in_array($value['name'], $filter);
}
);
我错在哪里?
2条答案
按热度按时间vql8enpb1#
根据错误输出:
你正在将数组转换为一个对象,但随后试图将其用作数组。当你删除
(object)
转换时,它就像你期望的那样工作。如果必须强制转换为对象,请在过滤器之后进行。
nhaq1z212#
PHP已经有了原生的优化函数来比较/过滤来自两个可迭代数据集的数据。
array_uintersect()
,在这种情况下,非常适合基于值进行过滤。由于无法预测在迭代期间填充
$a
和$b
变量的源数组,因此每次访问数据的尝试都必须回退到备用数组的数据。因为只有
$currencies
数组包含对象行,所以检查回调函数中的name
属性。如果该属性不存在,则可以知道可访问值属于平面$filter
数组。代码:(Demo)
上面的操作与在
array_filter()
内部进行in_array()
迭代调用的效果相同。两种技术输出: