0

2 つの配列があり、PHP を使用して 1 つの配列内の値を探しています。

PHPexplode関数を使用する必要があることはわかっていますが、残念ながらそれで私のスキルは終わりです。

私の関数は両方の配列の値を比較し、$needle内部に値が見つかった場合は内部$haystackに返します$found。潜在的に複数を見つける可能性があるので、おそらく$found配列でもあるべきでしょうか?

$needle = "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling";
$haystack = "Football,Rugby,Landscaping,3D Modelling";
$found = magicFunction($needle,$haystick); 
// $found['0'] = "Landscaping";
// $found['1'] = "3D Modelling";

これは理にかなっていますか?

これについてのポインタに感謝します。

4

5 に答える 5

7

PHP には、それを行うための便利な関数array_intersectが用意されています。

$needle = "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling";
$haystack = "Football,Rugby,Landscaping,3D Modelling";

$needle = explode(",", $needle);
$haystack = explode(",", $haystack);

$intersection = array_intersect($haystack, $needle);
print_r($intersection);
//Array ( [2] => Landscaping [3] => 3D Modelling )
于 2012-12-19T08:56:09.993 に答える
3

次のようなことができます。

$found = Array ();
$needle = "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling";
$haystack = "Football,Rugby,Landscaping,3D Modelling";
$search = explode(',',$haystack);
foreach ( explode(',',$needle as $k => $v )
{
  if ( in_array ( $v, $search ) )
    $found[] = $v;
}

または、Davidが言ったように、次を使用できますarray_intersect

$found = array_intersect ( explode( ',', $haystack ), explode( ',', $needle ) );
于 2012-12-19T08:57:11.417 に答える
1

お探しの関数は PHP に組み込まれています: array_intersect.

$a = explode(',', "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling");
$b = explode(',', "Football,Rugby,Landscaping,3D Modelling");
$found = array_intersect($a, $b); 
print_r($found);

出力: Array ( [1] => Landscaping [4] => 3D Modelling )

于 2012-12-19T09:02:48.410 に答える
1

針と干し草の山から配列を作成し、2 つの配列の交差を見つけることができます。

<?php

$needle = "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling";
$haystack = "Football,Rugby,Landscaping,3D Modelling";

$needle = explode(',', $needle);
$haystack = explode(',', $haystack);


$found = array_intersect($needle, $haystack);

print_r($found);
?>

http://tr1.php.net/array_intersect

于 2012-12-19T08:58:36.910 に答える
0

最も簡単な方法は、おそらく針を爆発させ、 を使用して出現箇所を探すことstrposです。

$needles = explode(',', $needle);
foreach ($needles as $n)
{
      if (strpos($n, $haystack)) {  }
}

文字列の位置が必要ない場合は、Jan Hančičソリューションの方が適切で高速です。

于 2012-12-19T08:58:31.933 に答える