PHP.mk документација

in_array

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.in-array.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.in-array.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
in_array

Референца за `function.in-array.php` со подобрена типографија и навигација.

function.in-array.php

in_array

(PHP 4, PHP 5, PHP 7, PHP 8)

in_arrayПроверува дали вредноста постои во низа

= NULL

in_array(mixed $needle, array $haystack, bool $strict = false): bool

Пребарува за needle in haystack користејќи лабава споредба освен ако strict е поставено.

Параметри

needle

Вредноста што се пребарува.

Забелешка:

Враќа needle е стринг, споредбата се прави чувствително на големи и мали букви.

haystack

Низата.

strict

Ако третиот параметар strict е поставен на true тогаш in_array() функцијата исто така ќе го провери types од needle во haystack.

Забелешка:

Пред PHP 8.0.0, а string needle ќе одговара на вредност од низа од 0 во не-строг режим, и обратно. Тоа може да доведе до непосакувани резултати. Слични гранични случаи постојат и за други типови. Ако не сте апсолутно сигурни за типовите на вклучените вредности, секогаш користете го strict знамето за да се избегне неочекувано однесување.

Вратени вредности

Патеката до PHP скриптата што треба да се провери. true if needle се најде во низата, false otherwise.

Примери

Пример #1 in_array() example

<?php
$os
= array("Mac", "NT", "Irix", "Linux");
if (
in_array("Irix", $os)) {
echo
"Got Irix";
}
if (
in_array("mac", $os)) {
echo
"Got mac";
}
?>

Вториот услов пропаѓа бидејќи in_array() е чувствително на големи и мали букви, така што програмата погоре ќе прикаже:

Got Irix

Пример #2 in_array() со строг пример

<?php
$a
= array('1.10', 12.4, 1.13);

if (
in_array('12.4', $a, true)) {
echo
"'12.4' found with strict check\n";
}

if (
in_array(1.13, $a, true)) {
echo
"1.13 found with strict check\n";
}
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

1.13 found with strict check

Пример #3 in_array() со низа како игла

<?php
$a
= array(array('p', 'h'), array('p', 'r'), 'o');

if (
in_array(array('p', 'h'), $a)) {
echo
"'ph' was found\n";
}

if (
in_array(array('f', 'i'), $a)) {
echo
"'fi' was found\n";
}

if (
in_array('o', $a)) {
echo
"'o' was found\n";
}
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

'ph' was found
'o' was found

Види Исто така

  • array_search() - Пребарува во низата за дадена вредност и враќа прв соодветен клуч ако е успешно
  • isset() - Определи дали променлива е прогласена и е различна од null
  • array_key_exists() - Проверува дали постои константа со даденото име

Белешки од корисници 6 белешки

beingmrkenny на gmail точка com
пред 14 години
Loose checking returns some crazy, counter-intuitive results when used with certain arrays. It is completely correct behaviour, due to PHP's leniency on variable types, but in "real-life" is almost useless.

The solution is to use the strict checking option.

<?php

// Example array

$array = array(
    'egg' => true,
    'cheese' => false,
    'hair' => 765,
    'goblins' => null,
    'ogres' => 'no ogres allowed in this array'
);

// Loose checking -- return values are in comments

// First three make sense, last four do not

in_array(null, $array); // true
in_array(false, $array); // true
in_array(765, $array); // true
in_array(763, $array); // true
in_array('egg', $array); // true
in_array('hhh', $array); // true
in_array(array(), $array); // true

// Strict checking

in_array(null, $array, true); // true
in_array(false, $array, true); // true
in_array(765, $array, true); // true
in_array(763, $array, true); // false
in_array('egg', $array, true); // false
in_array('hhh', $array, true); // false
in_array(array(), $array, true); // false

?>
eurorusty на yahoo точка ca
пред 1 година
I'm not sure why PHP doesn't provide a way to specify a binary search. Here's an example of the performance gains, for this array size, about 50x improvement using interpreted PHP. If built in, it could probably achieve around 1000x improvement, again for this array size.

<?php

// Set up sorted array
$X = array(1);
for ($j = 1; $j < 50000; ++$j)
    $X[] = $X[$j - 1] + rand(1, 6);

// Using in_array
$x = -microtime(true);
$m = 0;
for ($j = 0; $j < 10000; ++$j)
    $m += in_array(rand(1, 175000), $X);
$x += microtime(true);
echo $x.PHP_EOL;

// Using binarySearch
$x = -microtime(true);
$m = 0;
for ($j = 0; $j < 10000; ++$j)
    $m += binarySearch($X, rand(1, 175000));
$x += microtime(true);
echo $x.PHP_EOL;

function binarySearch($array, $value) {
    $low = 0;
    $high = count($array) - 1;
    while ($low <= $high) {
        $pivot = floor(($low + $high) / 2);
        if ($array[$pivot] == $value)
            return true;
        if ($value < $array[$pivot])
            $high = $pivot - 1;
        else
            $low = $pivot + 1;
    }
    // No match
    return false;
}

/* Sample outputs, first is in_array, second is binarySearch
1.3544600009918
0.026464939117432

1.6158990859985
0.033976078033447

1.5184400081635
0.026461124420166
*/
Јулијан Савицки
пред 2 години
Here is a recursive in_array function: 

<?php

$myNumbers = [
    [1,2,3,4,5],
    [6,7,8,9,10],
];

$array = [
    'numbers' => $myNumbers
];

// Let's try to find number 7 within $array
$hasNumber = in_array(7, $array, true); // bool(false)
$hasNumber = in_array_recursive(7, $array, true); // bool(true)

function in_array_recursive(mixed $needle, array $haystack, bool $strict): bool
{
    foreach ($haystack as $element) {
        if ($element === $needle) {
            return true;
        }

        $isFound = false;
        if (is_array($element)) {
            $isFound = in_array_recursive($needle, $element, $strict);
        }
        
        if ($isFound === true) {
            return true;
        }
    }

    return false;
}
leonhard dot radonic+phpnet at gmail dot com
3 години пред
I got an unexpected behavior working with in_array. I'm using following code:

<?php
// ...
$someId = getSomeId(); // it gets generated/fetched by another service, so I don't know what value it will have. P.S.: it's an integer

// The actual data in my edge-case scenario:
// $someId = 0;
// $anyArray = ['dataOne', 'dataTwo'];
if (in_array($someId, $anyArray)) {
    // do some work
}
// ...
?>

With PHP7.4, in_array returns boolean true.
With PHP8.1, in_array returns boolean false.

It took me quite some time to find out what's going on.
rhill at xenu-directory dot net
пред 17 години
I found out that in_array will *not* find an associative array within a haystack of associative arrays in strict mode if the keys were not generated in the *same order*:

<?php

$needle = array(
    'fruit'=>'banana', 'vegetable'=>'carrot'
    );

$haystack = array(
    array('vegetable'=>'carrot', 'fruit'=>'banana'),
    array('fruit'=>'apple', 'vegetable'=>'celery')
    );

echo in_array($needle, $haystack, true) ? 'true' : 'false';
// Output is 'false'

echo in_array($needle, $haystack) ? 'true' : 'false';
// Output is 'true'

?>

I had wrongly assumed the order of the items in an associative array were irrelevant, regardless of whether 'strict' is TRUE or FALSE: The order is irrelevant *only* if not in strict mode.
upadrian at gmail dot com
1 месец пред
It's worth the notice that in_array is case-sensitive.
Apart from the very first option of make all lowercase or uppercase, and then compare, I found this elegant solution:

<?php

function in_arrayi(float|int|string $needle, array $haystack):bool {
    return (bool)array_uintersect([$needle],$haystack,strcasecmp(...));
}

$needle = "abc";
$haystack = ["Abc","deF","gHi"];
$result = in_arrayi($needle,$haystack);

var_dump($result);

?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.