1

私は次の配列を持っています:

Array 
(
[0] => 
[1] => 
[2] => apple
[3] => 
[4] => orange
[5] => strawberry
[6] => 
)

内側からではなく、最初と最後から空のアイテムを削除するにはどうすればよいですか?最終的な配列は次のようになります。

Array 
(
[0] => apple
[1] => 
[2] => orange
[3] => strawberry
)
4

7 に答える 7

10

便利な方法は次のとおりです。

while (reset($array) == '') array_shift($array);
while (end($array) == '') array_pop($array);

実際に見てください

必須のコメント: 空の文字列との緩やかな比較を使用しています。これは、あなたの例で意図したように見えるためです。削除する要素を厳密に指定したい場合は、それに応じて条件をカスタマイズしてください。

更新: ボーナスの特徴である PHP の醜いコードの方が高速である可能性があります

配列の最初と最後に空の要素がたくさんある場合、上記の方法はそれらを1つずつ削除し、各ステップで配列のインデックスを再作成するなど、最速ではない可能性があることに気づきました。任意の配列に対して機能し、1 つのステップでトリミングを行います。警告:醜い

$firstNonEmpty = 0;
$i = 0;
foreach ($array as $val) {
    if ($val != '') {
        $firstNonEmpty = $i;
        break;
    }
    ++$i;
}

$lastNonEmpty = $count = count($array);
end($array);
for ($i = $count; $i > 0; --$i) {
    if (current($array) != '') {
        $lastNonEmpty = $i;
        break;
    }
    prev($array);
}

$array = array_slice($array, $firstNonEmpty, $lastNonEmpty - $firstNonEmpty);

実際に見てください

于 2012-04-19T15:16:24.077 に答える
1

いこうぜ :

$Array = array('', Allo, '');

if(isset($Array[0]) && empty($Array[0])){
    array_pop($Array);
}

$C = count($Array)-1;
if(isset($Array[$C]) && empty($Array[$C])){
    array_shift($Array);
}

最初と最後のの行のみを削除します。

最初と最後のすべてを削除したいが、空だけを削除したい場合は、これを行う必要があります:

$Array = array('', Allo, '', '', 'Toc', '', '', '');

$i=0;
foreach($Array as $Key => $Value){
    if(empty($Value)){
        unset($Array[$Key]);
    } else {
        break;
    }
    $i++;
}

$Array = array_reverse($Array);
$i=0;
foreach($Array as $Key => $Value){
    if(empty($Value)){
        unset($Array[$Key]);
    } else {
        break;
    }
    $i++;
}

$Array = array_reverse($Array);
于 2012-04-19T15:13:08.257 に答える
0

別の方法を次に示します。

<?php

$array = array('', '', 'banana', '', 'orange', '', '', '');

while ($array[0] == '')
{
    array_shift($array);
}

$count = count($array);

while ($array[$count - 1] == '')
{
    array_pop($array);
    $count--;
}

print_r($array);

?>
于 2012-04-19T15:19:04.210 に答える
0

次のスニペットがその役割を果たします。

function removeStartingEmptyIndexes($array)
{
  foreach($array as $i => $item)
  {
    if(!empty($item)) {
      break;
    }
    else
    {
      unset($array[$i]);
    }
  }

  return $array;
}

function trimEmptyIndexes($array)
{
  return array_reverse(removeStartingEmptyIndexes(array_reverse(removeStartingEmptyIndexes($array))));
}

$array = array("", "", "apple", "orange", "", "", "", "lemon", "", "");

$array = trimEmptyIndexes($array);

「trimEmptyIndexes($array)」を呼び出すだけです

于 2012-04-19T15:22:00.900 に答える
0

使用できます

array_pop($array); // remove the last element
array_shift($array); // remove the first element

最初または最後のインデックスが空であることを確認するために、前にいくつかの簡単なチェックを行うことができます

于 2012-04-19T15:15:07.593 に答える
-1
while(strlen($array[0])==0)
    unset(array[0]);

$doLoop=(strlen($array[ count(array)-1 ])==0);
while ($doLoop){
    unset($array[ count(array)-1 ]);
    $doLoop=(strlen($array[ count(array)-1 ])==0);
}
于 2012-04-19T15:18:17.797 に答える
-1

これを試して

foreach ($original_array as $index => $val) {
  if (is_empty($val)) {
    unset($original_array [$index]);
  } else {
    break;
  }

}
于 2012-04-19T15:14:17.203 に答える