1

$Aと$Bの2つの配列があります。両方の配列の長さは同じですが、配列$ 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

もう 1 つの簡単な方法は、空のアイテムを から に (再) 配置する$Aこと$Bです。

$B = array_replace($B, preg_grep('/^$/D', $A));
于 2012-08-16T06:34:38.363 に答える
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 に答える
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 に答える