我有下一个阵列:
$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);
});
但它对我不起作用。我正在进行debbuging,我注意到变量$noticia
和$portal_provincial
来自同一个数组($noticia
)。
我希望函数的第一个变量是$noticia
(来自$noticias
),第二个变量是$portal
(来自$portales
)。我怎么能这样做?
谢谢!
答案 0 :(得分:0)
我已将您的代码放在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()
更优雅,但可能有点慢。答案 1 :(得分:0)
结果是在控制台上:
Check: noticiaCodigo: CLARIN provincialCodigo: PAGINA12 Comparison: -13
Check: noticiaCodigo: SITIOANDINO provincialCodigo: CLARIN Comparison: 16
Check: noticiaCodigo: DIARIOUNO provincialCodigo: CLARIN Comparison: 1
Check: noticiaCodigo: LANACION provincialCodigo: CLARIN Comparison: 9
Check: noticiaCodigo: ELSOL provincialCodigo: CLARIN Comparison: 2
Check: noticiaCodigo: AMBITO provincialCodigo: CLARIN Comparison: -2
Check: noticiaCodigo: LANACION provincialCodigo: ELSOL Comparison: 7
Check: noticiaCodigo: LANACION provincialCodigo: PAGINA12 Comparison: -4
Check: noticiaCodigo: SITIOANDINO provincialCodigo: LANACION Comparison: 7
Check: noticiaCodigo: DIARIOUNO provincialCodigo: LANACION Comparison: -8
Check: noticiaCodigo: ELSOL provincialCodigo: DIARIOUNO Comparison: 1
Check: noticiaCodigo: SITIOANDINO provincialCodigo: PAGINA12 Comparison: 3
Check: noticiaCodigo: provincialCodigo: Comparison: 0
Check: noticiaCodigo: provincialCodigo: Comparison: 0
Check: noticiaCodigo: provincialCodigo: Comparison: 0
Check: noticiaCodigo: provincialCodigo: Comparison: 0
Check: noticiaCodigo: provincialCodigo: Comparison: 0
Check: noticiaCodigo: provincialCodigo: Comparison: 0
Check: noticiaCodigo: provincialCodigo: Comparison: 0
Check: noticiaCodigo: provincialCodigo: Comparison: 0
Check: noticiaCodigo: AMBITO provincialCodigo: Comparison: 6
Check: noticiaCodigo: AMBITO provincialCodigo: Comparison: 6
Check: noticiaCodigo: AMBITO provincialCodigo: Comparison: 6
Check: noticiaCodigo: AMBITO provincialCodigo: Comparison: 6
Check: noticiaCodigo: AMBITO provincialCodigo: Comparison: 6
Check: noticiaCodigo: AMBITO provincialCodigo: Comparison: 6
array (size=0)
empty
这是我尝试的完整代码:
$portales_nacional_provinciales = [];
$losandes = TableRegistry::get('Portales')->find('all', ['Portales.codigo' => 'LOSANDES'])->first();
array_push($portales_nacional_provinciales, $losandes);
$elsol = TableRegistry::get('Portales')->find('all', ['Portales.codigo' => 'ELSOL'])->first();
array_push($portales_nacional_provinciales, $elsol);
$mdz = TableRegistry::get('Portales')->find('all', ['Portales.codigo' => 'MDZ'])->first();
array_push($portales_nacional_provinciales, $mdz);
$diariouno = TableRegistry::get('Portales')->find('all', ['Portales.codigo' => 'DIARIOUNO'])->first();
array_push($portales_nacional_provinciales, $diariouno);
$mendozapost = TableRegistry::get('Portales')->find('all', ['Portales.codigo' => 'MENDOZAPOST'])->first();
array_push($portales_nacional_provinciales, $mendozapost);
$sitioandino = TableRegistry::get('Portales')->find('all', ['Portales.codigo' => 'SITIOANDINO'])->first();
array_push($portales_nacional_provinciales, $sitioandino);
$noticias_provinciales = array_uintersect($noticias, $portales_nacional_provinciales, function($noticia, $portal_provincial){
$portal_codigo_noticia = $noticia['Portal__codigo'];
$portal_codigo_provincial = $portal_provincial['Portal__codigo'];
echo "Check: noticiaCodigo: " . $portal_codigo_noticia . " provincialCodigo: " . $portal_codigo_provincial . " Comparison: " . strcasecmp($portal_codigo_noticia, $portal_codigo_provincial) . "</br>";
return strcasecmp($portal_codigo_noticia, $portal_codigo_provincial);
});
var_dump($noticias_provinciales);
我唯一做的就是改变一个变量的名称和来自&#34; codigo&#34; for&#34; Portal__codigo&#34;。 &#34; Portal__codigo&#34;是&#34; $ noticias&#34;中属性的名称。从数据库中恢复我使用PHPCake3。
谢谢!