Skip to content

Instantly share code, notes, and snippets.

@branneman
Last active January 27, 2021 18:42
Show Gist options
  • Select an option

  • Save branneman/951847 to your computer and use it in GitHub Desktop.

Select an option

Save branneman/951847 to your computer and use it in GitHub Desktop.
array_find() - A case insensitive array_search() with partial matches
<?php
/**
* Case in-sensitive array_search() with partial matches
*
* @param string $needle The string to search for.
* @param array $haystack The array to search in.
*
* @author Bran van der Meer <branmovic@gmail.com>
* @since 29-01-2010
*/
function array_find($needle, array $haystack)
{
foreach ($haystack as $key => $value) {
if (false !== stripos($value, $needle)) {
return $key;
}
}
return false;
}
@JJJ

JJJ commented Nov 5, 2019

Copy link
Copy Markdown

If you're not afraid of a little bit of regex, preg_grep() is native PHP and will likely do this more quickly:

https://www.php.net/manual/en/function.preg-grep.php

// Looking for "first " at beginning of any array values

// Get results
$results = array_values( preg_grep( '/^first (\w+)/i', array(
    'f', 'fun', 'first', 'first match', 'not first'
) ) );

// Output
var_dump( $results );

// Results
array (size=1)
  0 => string 'first match' (length=11)

The PREG_GREP_INVERT flag even allows quickly targeting the inverse.

// Looking for inverse of "first " at beginning of any array values

// Get results
$results = array_values( preg_grep( '/^first (\w+)/i', array(
    'f', 'fun', 'first', 'first match', 'not first'
), PREG_GREP_INVERT ) );

// Output
var_dump( $results );

// Results
array (size=4)
  0 => string 'f' (length=1)
  1 => string 'fun' (length=3)
  2 => string 'first' (length=5)
  3 => string 'not first' (length=9)

Note that I'm using /i above to denote case insensitivity.

@amatek

amatek commented Mar 30, 2020

Copy link
Copy Markdown

Very helpful. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment