Как найти значение в массиве и удалить его при помощи функций массива PHP?

Спасибо @Ellisein за помощь со строкой кода class FunCog(commands.Cog):. Еще одна вещь, которая помогла мне исправить код, - заменить bot.add_cog("cogs.fun") в main.py на bot.load_extension("cogs.fun")!

53
задан Machavity 28 October 2019 в 11:51
поделиться

4 ответа

Для поиска элемента в массиве вы можете использовать функцию array_search , а для удаления элемента из массива вы можете использовать unset функция. Пример:

<?php
$hackers = array ('Alan Kay', 'Peter Norvig', 'Linus Trovalds', 'Larry Page');

print_r($hackers);

// Search
$pos = array_search('Linus Trovalds', $hackers);

echo 'Linus Trovalds found at: ' . $pos;

// Remove from array
unset($hackers[$pos]);

print_r($hackers);

Вы можете обратиться к: https://www.php.net/manual/en/ref.array.php для получения дополнительных функций, связанных с массивами.

92
ответ дан 7 November 2019 в 08:15
поделиться

Хорошо, это немного длиннее, но делает несколько прохладных вещей.

я пытался отфильтровать список электронных писем, но исключить определенные домены и электронные письма.

Сценарий ниже желания...

  1. Удаляют любые записи с определенным доменом
  2. , Удаляют любую электронную почту с точным значением.

Первый Вам нужен массив со списком электронных писем, и затем можно добавить определенные домены или отдельные почтовые ящики к спискам исключения.

Затем это произведет список чистых досье в конце.

//list of domains to exclude
$excluded_domains = array(
    "domain1.com",
);

//list of emails to exclude
$excluded_emails = array(
    "bob@domain2.com",
    "joe@domain3.com",    
);

function get_domain($email) {

    $domain = explode("@", $email);
    $domain = $domain[1];
    return $domain;

}

//loop through list of emails
foreach($emails as $email) {

    //set false flag
    $exclude = false;

    //extract the domain from the email     
    $domain = get_domain($email);

    //check if the domain is in the exclude domains list
    if(in_array($domain, $excluded_domains)){
        $exclude = true;
    }

    //check if the domain is in the exclude emails list
    if(in_array($email, $excluded_emails)){
        $exclude = true;
    } 

    //if its not excluded add it to the final array
    if($exclude == false) {
        $clean_email_list[] = $email;
    }

    $count = $count + 1;
}

print_r($clean_email_list);
0
ответ дан 7 November 2019 в 08:15
поделиться

Сначала вам нужно найти ключ массива, это можно сделать с помощью array_search()

После этого используйте unset()

<?php
$array = array( 'apple', 'orange', 'pear' );

unset( $array[array_search( 'orange', $array )] );
?>
14
ответ дан 7 November 2019 в 08:15
поделиться

Прежде всего, как уже было сказано, вы будете использовать методы "array_search()" и "unset()", как показано ниже:-

<?php
$arrayDummy = array( 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg' );
unset( $arrayDummy[array_search( 'dddd', $arrayDummy )] ); // Index 3 is getting unset here.
print_r( $arrayDummy ); // This will show the indexes as 0, 1, 2, 4, 5, 6.
?>

Теперь, чтобы переиндексировать тот же массив без сортировки значений массива, вам нужно использовать метод "array_values()", как показано ниже:-

<?php
$arrayDummy = array_values( $arrayDummy );
print_r( $arrayDummy ); // Now, you will see the indexes as 0, 1, 2, 3, 4, 5.
?>

Надеюсь, это поможет.

1
ответ дан 7 November 2019 в 08:15
поделиться