Как удалить определенные ключи из массива?PHP - PullRequest
9 голосов
/ 05 марта 2011

Я пытаюсь удалить ключи из массива.

Вот что я получаю от печати print_r ($ cats);

Array
(
    [0] => <a href="/website/index.php/Category:All" title="Category:All">All</a> &gt; <a href="/website/index.php/Category:Computer_errors" title="Category:Computer errors">Computer errors</a> &gt; <a href="/website/index.php/Category:HTTP_status_codes" title="Category:HTTP status codes">HTTP status codes</a> &gt; <a href="/website/index.php/Category:Internet_terminology" title="Category:Internet terminology">Internet terminology</a> 
    [1] => 
<a href="/website/index.php/Category:Main" title="Category:Main">Main</a> 
)

Я пытаюсь использовать это для удаления "Main"категория из массива

    function array_cleanup( $array, $todelete )
{
    foreach( $array as $key )
    {
        if ( in_array( $key[ 'Main' ], $todelete ) )
        unset( $array[ $key ] );

    }
    return $array;
}

$newarray = array_cleanup( $cats, array('Main') );

Просто к сведению, я новичок в PHP ... очевидно, я вижу, что допустил ошибки, но я уже перепробовал много вещей, и они просто не работают

Ответы [ 4 ]

10 голосов
/ 05 марта 2011

Main не является элементом массива, он является частью элемента массива

function array_cleanup( $array, $todelete )
{
    $cloneArray = $array;
    foreach( $cloneArray as $key => $value )
    {
        if (strpos($value, $todelete ) !== false)   
           unset( $array[ $key ] );     //$array[$key] = str_replace($toDelete, $replaceWith, $value) ;  // add one more argument $replaceWith to function 

    }
    return $array;
}

Редактировать:

с массивом

function array_cleanup( $array, $todelete )
    {
      foreach($todelete as $del){
        $cloneArray = $array;
        foreach( $cloneArray as $key => $value )
        {          
            if (strpos($value, $del ) !== false)   
               unset( $array[ $key ] );     //$array[$key] = str_replace($toDelete, $replaceWith, $value) ;  // add one more argument $replaceWith to function 

           }
    }
     return $array;
}

  $newarray = array_cleanup( $cats, array('Category:Main') );
2 голосов
/ 08 марта 2013

Хотелось бы отметить, что хотя принятый ответ работает, есть встроенная функция PHP, которая обрабатывает это, называется array_filter .Для этого конкретного примера это будет что-то вроде:

public function arrayRemoveMain($var){
    if ( strpos( $var, "Category:Main" ) !== false ) { return false; }
    return true;
}

$newarray = array_filter( $cats, "arrayRemoveMain" );

Очевидно, что есть много способов сделать это, и принятый ответ вполне может быть самой идеальной ситуацией, особенно если существует большое количество $удалить варианты.Со встроенным array_filter я не знаю, как передать дополнительные параметры, такие как $ todelete, поэтому для каждой опции должна быть создана новая функция.

0 голосов
/ 16 августа 2017

Вопрос в том, «как удалить определенные ключи». Итак, вот ответ с фильтром массива, если вы хотите исключить ключи, содержащие определенную строку, в нашем примере, если мы хотим удалить что-либо, содержащее «alt_"

$arr = array(
"alt_1"=>"val", 
"alt_2" => "val", 
"good key" => "val"
);

function remove_alt($k) {
    if(strpos($k, "alt_") !== false) {
        # return false if there's an "alt_" (won't pass array_filter)
        return false;
    } else {
        # all good, return true (let it pass array_filter)
        return true;
    }

}

$new = array_filter($arr,"remove_alt",ARRAY_FILTER_USE_KEY);
                                        # ^ this tells the script to enable the usage of array keys!

Это вернет массив

(" "хороший ключ" => "val");

0 голосов
/ 17 мая 2017

Это просто.

$times = ['08:00' => '08:00','09:00' => '09:00','10:00' => '10:00'];
$timesReserved = ['08:00'];
$times = (function() use ($times, $timesReserved) {
        foreach($timesReserved as $time){
            unset($times[$time]);
        }
        return $times;
    })();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...