PHP: Как я могу проверить содержимое массива для моей строки? - PullRequest
0 голосов
/ 25 января 2010

Я строка из моей таблицы базы данных, скажем, $ needle. Если иглы нет в моем массиве, я хочу добавить ее в свой массив.

Если он есть в моем массиве, то, если он только в два раза, то я все еще хочу добавить его в мой массив (так будет три раза максимум)

Чтобы проверить, находится ли $ needle в моем массиве $ haystack, нужно ли мне нужно перебрать массив с помощью strpos () или есть более быстрый метод?

В таблице много игл, поэтому я начну с цикла результат выбора.

Это схема того, что я пытаюсь сделать ...

$haystack = array();

  while( $row = mysql_fetch_assoc($result)) {
   $needle = $row['data'];

    $num = no. of times $needle is in $haystack //   $haystack is an array

    if ($num < 3 ) {
        $$haystack[] = $needle; // hopfully this adds the needle
        }

     } // end while. Get next needle. 

Кто-нибудь знает, как мне сделать этот бит:

$ num = нет. раз $ needle находится в $ стоге сена

спасибо

Ответы [ 4 ]

1 голос
/ 25 января 2010

Вы можете использовать array_count_values ​​() , чтобы сначала сгенерировать карту, содержащую частоту для каждого значения, а затем увеличивать значение только в том случае, если счетчик значений на карте был <3, например: </p>

$original_values_count = array_count_values($values);

foreach ($values as $value)
    if ($original_values_count[$value] < 3)
        $values[] = $value;

Поскольку зацикливание невозможно полностью избежать, я бы сказал, что было бы неплохо выбрать использование нативной функции PHP с точки зрения скорости, а не зацикливать все значения вручную.

1 голос
/ 25 января 2010

Вы имели в виду array_count_values ​​() , чтобы вернуть вхождения всех уникальных значений?

<?php
$a=array("Cat","Dog","Horse","Dog");
print_r(array_count_values($a));
?> 

Вывод кода выше будет:

Array ( 
[Cat] => 1,
[Dog] => 2,
[Horse] => 1
 )  
0 голосов
/ 26 января 2010

Может быть, что-то вроде следующего? Просто немного изменив код Миека.

$haystack_count = array_count_values($haystack);
if ($haystack_count[$needle] < 3)
    $haystack[] = $needle;
0 голосов
/ 25 января 2010

Существует также функция array_map () , которая применяет данную функцию к каждому элементу массива.

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