【发布时间】:2020-04-08 01:21:04
【问题描述】:
编辑:我重写了我的帖子,以便更清晰并提供具有真实价值的独立案例(不再使用 Ajax)。
我有 2 个完全相同的数组,除了一个具有相同的值但已清理(html、特殊字符等)。
我想根据“arrayClean”评估排序,但要根据该评估对“arrayOriginal”进行排序(而不是 arrayClean)。
所以,这就是我所拥有的:
<?php
$arrayOriginal = array(
array('id' => '100','surface' => '<span>300</span>','whatever' => 'qSDqsd'),
array('id' => '5465','surface' => '100 ch','whatever' => 'ghjkghjk'),
array('id' => '40489','surface' => '<b>1000</b>','whatever' => 'fgsdfg')
);
$arrayClean = array(
array('id' => '100','surface' => '300','whatever' => 'qSDqsd'),
array('id' => '5465','surface' => '100','whatever' => 'ghjkghjk'),
array('id' => '40489','surface' => '1000','whatever' => 'fgsdfg')
);
usort($arrayOriginal, function($a, $b) use (&$arrayClean) {
return $a['surface'] < $b['surface'];
});
echo '<pre>'; print_r($arrayOriginal); echo '</pre>';
?>
这是我得到的(这是错误的,因为 arrayClean 似乎没有考虑到排序):
Array
(
[0] => Array
(
[id] => 100
[surface] => <span>300</span>
[whatever] => qSDqsd
)
[1] => Array
(
[id] => 40489
[surface] => <b>1000</b>
[pwhatever] => fgsdfg
)
[2] => Array
(
[id] => 5465
[surface] => 100 ch
[whatever] => ghjkghjk
)
)
但是如果我单独使用arrayClean,只是为了检查排序脚本是否正确:
usort($arrayClean, function($a, $b) {
return $a['surface'] < $b['surface'];
});
echo '<pre>'; print_r($arrayClean); echo '</pre>';
那么结果就是我所期望的:
Array
(
[0] => Array
(
[id] => 40489
[surface] => 1000
[whatever] => fgsdfg
)
[1] => Array
(
[id] => 100
[surface] => 300
[whatever] => qSDqsd
)
[2] => Array
(
[id] => 5465
[surface] => 100
[whatever] => ghjkghjk
)
)
因此,似乎评估 arrayClean 但对 arrayOriginal 进行相应的排序是行不通的。它只评估和排序arrayOriginal。 我使用“use()”错了吗?我应该使用其他东西吗?
谢谢。
【问题讨论】:
-
因为当您使用
use闭包时,它会通过值传递它,因此通过引用传递它尝试在array名称之前添加&就像这样use(&$arrayClean) -
谢谢。我通过在 use() 闭包中的数组之前添加“&”来尝试您的提议,但我得到的结果与以前完全相同。
-
实际上,我编辑了我的初始帖子:无论有没有你的提议,arrayOriginal 实际上都是排序的,但不像 arrayClean 那样(如果我单独排序的话)。它以通常的方式对 arrayOriginal 进行排序,而不考虑 arrayClean。