在PHP中:如何将一个数组的子集过滤到另一个数组?

时间:2009-12-15 21:45:54

标签: php arrays

foreach ($myarray as $value)
  {
        if (strpos($value,'mysearchstring'))
             //add this $value to new array here
  }

还需要声明第二个数组的位置以及如何?

8 个答案:

答案 0 :(得分:8)

为了避免警告,第二个数组应该声明为

$newArray = array();

这可以像你这样整合到你的代码中

$newArray = array();
foreach ($myarray as $value){
    if (strpos($value,'mysearchstring') !== false ){
         $newArray[] = $value;
    }
}

您的原始代码包含错误。 strpos如果不包含针,则返回false,否则返回事件的索引。因此strpos($value,'mysearchstring')如果$value'mysearchstring'开头,则会返回0。由于PHP会将0转换为false,反之亦然,如果我们使用标准比较,它将不会被添加到数组中,因此我们需要在没有类型转换的情况下明确检查它是否为false(转换{例如{1}}到0。为此,我们使用!==(注意两个false)s。这在上面的代码中表示。

有关php中比较运算符的更多信息,请see the documentation

修改
关于=的推荐和使用,它将新元素广告到数组的末尾

documentation表示:

  

如果没有指定键[在方括号中],则采用现有整数索引的最大值,新键将是该最大值加1.如果还没有整数索引,则键将为0(零)。

所以如果我们有一个数组

[]

答案 1 :(得分:4)

$newarray = array();

foreach ($myarray as $value) {
    if(strpos($value, 'mysearchstring') !== false) {
        $newarray[] = $value;
    }
}

答案 2 :(得分:4)

如何使用array_filter获取所有匹配元素,而不是像其他人的解决方案一样循环? array_filter仅返回在传递回调函数时返回true的元素:

function matches_string($value)
{
  return (strpos($value, 'mysearchstring') !== false);
}

$filtered_array = array_filter($my_array, "matches_string");

答案 3 :(得分:1)

$array1 = array("jonathan", "joe", "david", "sampson");
$array2 = array();

foreach ($array1 as $name) {
  if (condition)
    $array2[] = $name;
}

答案 4 :(得分:1)

您需要在foreach之外声明您的第二个数组。否则,每次迭代都会重新启动。

$matches = array();
foreach ($myarray as $value) {
    if (strpos($value,'mysearchstring') !== false) {
        $matches[] = $value;
    }
}

另外请确保使用与 false 的类型安全比较,因为如果针位于字符串的开头,strpos可能会返回0。

答案 5 :(得分:1)

您可以在foreach之前声明第二个数组。像这样:

$secArray = array();
foreach ($myarray as $value)
{
    if (strpos($value,'mysearchstring')) {
        $secArray[] = $value;
    }
}

[] -Operator是array_push的别名。

祝你好运,
费边

答案 6 :(得分:1)

使用array()构造函数在循环之前声明新数组。你需要使用!== false因为如果搜索字符串出现在字符串的开头,strpos将返回0(不是布尔值false)。您也可以考虑使用stripos进行不区分大小写的搜索。

$new_array = array();
foreach ($myarray as $value)
  {
        if (strpos($value,'mysearchstring') !== false )
            $new_array[] = $value;
  }

答案 7 :(得分:1)

你甚至可以使用array_filter和一个回调函数:

$original = array('one','two','three','four','five');

$only_containing_o = array_filter($original, create_function('$string','return strpos($string, "o") !== false;'));

print_r($only_containing_o);