1

我有两个数组,$A 和 $B。两个数组具有相同的长度,但数组 $A 将始终具有与 $B 相同数量的非空元素,或者它将具有比 $B 更少的非空元素。

因此,如果,

$B = array("john","adams","sandwich");

那么 $A 可能是,

$A = array("bacon","ham","juice");

或者它可能是,

$A = array("bacon","","");

我正在尝试将 $B 的空元素与 $A 匹配。所以我可以得到,

$B = array("john","","");

我目前正在通过以下代码进行操作:

$q = count($A) - 1;
$l = count($A) - count(array_filter($A));
$i = 1;
while($i <= $l){
    $B[$q] = "";
    $i++;
    $q--;
}

但是这种方法非常慢,考虑到我要多次这样做,可能会导致问题。你们对如何更有效地做到这一点有什么建议吗?数组永远不会超过 20 个元素,但由于某种原因,这仍然很耗时。

4

6 回答 6

2

试试这个..

$c=array_diff($a,$b);
foreach($c as $key=>$val){
if($val=="")
    $b[$key]="";
}

希望它有效...

于 2012-08-16T06:41:43.160 回答
1

以下代码适用于所有情况,无论空值是否位于数组中的任何位置:

$A = array('a', 'b', 'c');
$B = array('', 'ab', 'zx');
$B = array_filter($B, 'strlen');
$B = array_filter($A, 'customfun');
print_r($B);
exit;
function customfun($param) {
    global $A;
    global $B;
    $key = array_search($param, array_values($A));
    if(isset($B[$key])) {
        return true;
    } else {
        return false;
    }
}
于 2012-08-16T06:23:11.590 回答
1

另一种简单的方法是将空项目(重新)放置$A$B.

$B = array_replace($B, preg_grep('/^$/D', $A));
于 2012-08-16T06:34:38.363 回答
0

如果正确理解您的问题,那么您可能正在寻找这个:

$x = count(array_filter($A))
$B = array_merge(array_slice($B,0,$x), array_fill(0,count($B)-$x,""))

或者做

foreach($B as $i => &$v)
    if($A[$i] == "")
        $v = ""
于 2012-08-16T06:08:53.320 回答
0
<?php
//test.php
$b = array("john","adams","sandwich");
$a = array("bacon","","");

$length = count($a);

for($lcv = 0; $lcv < $length; ++$lcv)
{
    if($a[$lcv] == "")
    {
        $b[$lcv] = "";
    } 
}

?>

像这样?

于 2012-08-16T06:34:41.950 回答
0
function getArr($b,$a)
{
    if($a === '')
    {
        return '';
    }
    return $b;
}
$B = array("john","adams","sandwich");
$A = array("bacon","","");
print_r($A);
$B = array_map('getArr',$B,$A);
print_r($B); 
于 2012-08-16T06:48:08.147 回答