-2

2 つの配列を比較する必要があります。最初の配列には 1 つの順序があり、変更できません。他の配列では、値が異なります。最初の配列は、自分の ID を他の配列の ID と比較する必要があります。 same 、値を取り、すべてを同じ順序で表示するために置き換えます

例えば ​​:

$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");

この場合の結果は、これを取得したい:

"1a-dogs","2a-cats","3a-birds","4a-walking"

この場合の id が4aの場合は同じであり、そのエントリを変更して他の配列の値を入れ、すべて同じ順序に保つ必要があります

私はこれを行いますが、うまくいきません:

for($fte=0;$fte<count($array_1);$fte++)
{
  $exp_id_tmp=explode("-",$array_1[$fte]);  
  $cr_temp[]="".$exp_id_tmp[0]."";  
}   


for($ftt=0;$ftt<count($array_2);$ftt++)
{
  $exp_id_targ=explode("-",$array_2[$ftt]);
  $cr_target[]="".$exp_id_targ[0]."";   
}

/// Here I tried use array_diff and others but no can get the results as i want 

この結果を得るためにこれを行うにはどうすればよいですか?

4

4 に答える 4

0

どうぞ。これは、私が今までに書いた中で最もクリーンなコードではありません。

実行可能な例: http://3v4l.org/kUC3r

<?php
$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");

function getKeyStartingWith($array, $startVal){
    foreach($array as $key => $val){
        if(strpos($val, $startVal) === 0){
            return $key;
        }
    }
    return false;
}

function getMergedArray($array_1, $array_2){
    $array_3 = array();
    foreach($array_1 as $key => $val){
        $startVal = substr($val, 0, 2);
        $array_2_key = getKeyStartingWith($array_2, $startVal);
        if($array_2_key !== false){
            $array_3[$key] = $array_2[$array_2_key];
        } else {
            $array_3[$key] = $val;
        }
    }
    return $array_3;
}

$array_1 = getMergedArray($array_1, $array_2);

print_r($array_1);
于 2014-05-31T22:20:46.070 に答える
0

コールバックで array_udiff_assoc() 関数を使用できるかもしれません

于 2014-05-31T22:03:22.553 に答える
0

まず、2 つの配列を適切なキーと値のペア (キー = 1a と値 = ドッグ) に分割します。次に、最初の配列をループして、そのキーごとに 2 番目の配列に存在するかどうかを確認します。存在する場合は、最初の配列の 2 番目の配列の値を置き換えます。最後に、最初の配列には必要な結果が含まれます。

そのようです:

$array_1 = array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2 = array("4a-walking","2a-cats");

function splitArray ($arrayInput)
{
    $arrayOutput = array();
    foreach ($arrayInput as $element) {
        $tempArray = explode('-', $element);
        $arrayOutput[$tempArray[0]] = $tempArray[1];
    }
    return $arrayOutput;
}

$arraySplit1 = splitArray($array_1);
$arraySplit2 = splitArray($array_2);

foreach ($arraySplit1 as $key1 => $value1) {
    if (array_key_exists($key1, $arraySplit2)) {
        $arraySplit1[$key1] = $arraySplit2[$key1];
    }
}

print_r($arraySplit1);

ここで動作を確認してください: http://3v4l.org/2BrVI

于 2014-05-31T22:11:25.103 に答える
0
$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");

function merge_array($arr1, $arr2) {
    $arr_tmp1 = array();
    foreach($arr1 as $val) {
        list($key, $val) = explode('-', $val);
        $arr_tmp1[$key] = $val;
    }
    foreach($arr2 as $val) {
        list($key, $val) = explode('-', $val);
        if(array_key_exists($key, $arr_tmp1))
            $arr_tmp1[$key] = $val;
    }

    return $arr_tmp1;
}

$result = merge_array($array_1, $array_2);

echo '<pre>';
print_r($result);
echo '</pre>';

この短いコードは適切に機能し、次の結果が得られます。

Array
(
    [1a] => dogs
    [2a] => cats
    [3a] => birds
    [4a] => walking
)
于 2014-05-31T22:23:08.863 に答える