Фильтрация по PHP - PullRequest
       9

Фильтрация по PHP

0 голосов
/ 21 декабря 2009

У меня есть $ data в столбце1, показывает мне:

"aaa123" "ABC1234" "ABD123" "BAC12" "CAB123" "DA125" и так далее ..

Я хотел бы показать $ data, начиная только с "AB", который показывает меня в столбце 1, как:

"ABC1234" "ABD123"

не остальные, а также другие строки и столбцы, связанные с "ABC1234" и "ABD123"


Спасибо заранее.

Пример структуры http://img706.imageshack.us/img706/8994/34310422.jpg

Ответы [ 3 ]

3 голосов
/ 21 декабря 2009

Если $data - это массив строк, вы можете использовать array_filter .

PHP 5.3 или более поздняя версия:

$AB = array_filter($data, function($str) {
    return 'AB' == substr($str, 0, 2);
});

до PHP 5.3:

$AB = array_filter($data, 
                   create_function('$str', 
                                   'return "AB" == substr($str, 0, 2);'
                  )               );

Или:

function create_prefix_tester($prefix) {
    return create_function('$str', 
                  "return '$prefix' == substr(\$str, 0, " . strlen($prefix) . ');'
                  );
}
$AB = array_filter($data, create_prefix_tester('AB'));

Или вы можете использовать цикл:

foreach ($data as $str) {
    if ('AB' ==  substr($str, 0, 2)) {
      // do stuff
      ...
    }
}

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

Из примера кода, похоже, вы захотите цикл:

while (FALSE !== ($line = fgets($fp))) {
    $row = explode('|', $line); // split() is deprecated
    if ('AB' == substr($row[0], 0, 2)) {
        switch($sortby) {
        case 'schools': // fallthru
        default:
            $sortValue = $row[0];
            break;
        case 'dates':
            $sortValue = $row[1];
            break;
        case 'times':
            $sortValue = $row[2];
            break;
        }
        array_unshift($row, $sortValue);
        $table[] = $row;
    }
}

или

function cmp_schools($a, $b) {
    return strcmp($a[0], $b[0]);
}
function cmp_dates($a, $b) {
    return $a['datestamp'] - $b['datestamp'];
}
function cmp_times($a, $b) {
    return $a['timestamp'] - $b['timestamp'];
}
while (FALSE !== ($line = fgets($fp))) {
    $row = explode('|', $line); // split() is deprecated
    if ('AB' == substr($row[0], 0, 2)) {
        $when = strtotime($row[1] + ' ' + $row[2]);
        $row['timestamp'] = $when % (60*60*24);
        $row['datestamp'] = $when - $row['timestamp'];
        $table[] = $row;
    }
}
usort($table, 'cmp_' + $sortby);
2 голосов
/ 21 декабря 2009

Я бы просто использовал substr(), как в следующем фрагменте:

if (substr($str, 0, 2) == 'AB') {
  // The string is right.
}
1 голос
/ 21 декабря 2009

Использование strpos (http://www.php.net/manual/en/function.strpos.php), как

if (strpos($my_string, "AB") === 0) {
  <do stuff>
}

Обязательно используйте === вместо ==, потому что, если «AB» не найден, функция вернет false, что будет равно 0, используя ==.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...