我有下一个数组:
$noticias = [
"0" => Array(
"codigo" => "AMBITO"),
"1" => Array(
"codigo" => "ELSOL"),
"2" => Array(
"codigo" => "MDZ")
]
$portales = [
"0" => Array(
"codigo" => "LOSANDES"),
"1" => Array(
"codigo" => "MDZ"),
"2" => Array(
"codigo" => "ELSOL")
]
我需要通过属性 codigo
比较两个数组。结果将是:
$result = [
"1" => Array(
"codigo" => "ELSOL"),
"2" => Array(
"codigo" => "MDZ")
]
我该怎么办?此刻,我有这个:
$noticias_provinciales = array_uintersect($noticias, $portales, function($noticia, $portal_provincial){
$portal_codigo_noticia = $noticia['Portal__codigo'];
$portal_codigo_provincial = $portal_provincial->codigo;
return ($portal_codigo_noticia === $portal_codigo_provincial ? 0: 1);
});
但这对我不起作用。我正在调试,我注意到变量 $noticia
和 $portal_provincial
来自同一个数组 ($noticia
)。
我希望函数中的第一个变量是 $noticia
(来自 $noticias
),第二个变量是 $portal
(来自 $传送门
)。我该怎么做?
谢谢!
最佳答案
我已将您的代码放入 PHP 沙箱中并对其进行了改进,因此以下代码至少可以在 PHP 5.4.10 到 PHP 7 下运行。
$noticias = [
"0" => Array(
"codigo" => "AMBITO"),
"1" => Array(
"codigo" => "ELSOL"),
"2" => Array(
"codigo" => "MDZ")
]; // no changes here
$portales = [
"0" => Array(
"codigo" => "LOSANDES"),
"1" => Array(
"codigo" => "MDZ"),
"2" => Array(
"codigo" => "ELSOL")
]; // no changes here
$noticias_provinciales = array_uintersect($noticias, $portales, function($noticia, $portal_provincial){
$portal_codigo_noticia = $noticia['codigo'];
$portal_codigo_provincial = $portal_provincial['codigo'];
return strcasecmp($portal_codigo_noticia, $portal_codigo_provincial);
});
var_dump($noticias_provinciales);
您的代码存在的问题是(从我的角度来看):
- 访问数组成员错误。
$portal_provincial->codigo
不起作用,因为$portal_provincial
不是对象。没有名为'Portal__codigo'
的索引。 strcasecmp($portal_codigo_noticia, $portal_codigo_provincial)
和($portal_codigo_noticia === $portal_codigo_provincial ? 0: 1)
的用法不一样。现在我无法解释原因,但对我来说只有strcasecmp()
有效。然而,strcasecmp()
更优雅但可能有点慢。
关于php - 如何使用 'array_uintersec' 比较两个数组的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35942523/