Помогите с выборкой значений из массива

rasandrey

Участник
Регистрация
2 Апр 2009
Сообщения
214
Реакции
6
Есть массив вида
PHP:
Array
(
    [0] => Array
        (
            [0] => 20
        )

    [1] => Array
        (
            [0] => 20
        )

    [2] => Array
        (
            [0] => 20
        )

    [3] => Array
        (
            [0] => 20
        )

    [4] => Array
        (
            [0] => 93
        )

)

Нужно в итоге получить новый массив, который будет иметь вид

PHP:
Array
(
    [номер] => Array
        (
            [0] => значение
            [1] => число повторений

        )


)

Т.е. построить новый массив, методом перебора старого, и если значение повторяется (в нашем случае "20"), то в новом массиве будет указано сколько именно раз повторяется.
 
PHP:
$stored = array();
$result = array();

foreach($array as $item)
{
    if(!isset($stored[$item[0]]))
        $stored[$item[0]] = 0;
    else
        $stored[$item[0]] ++;
}

foreach($stored as $item => $iteration)
{
    $result[] = array($item, iteration);
}
 
еще вопрос по тем же массивам:
Есть таблица sql, в ней 3 поля (id,id2,name)
В каждой записи могут быть одинаковые значения полей id,name по сравнению с остальными
Нужно выбрать из таблицы все записи и сформировать массив, но если ячейка в массиве с таким id и name уже есть в предыдущей ячейке, то пропустить.
Помогите плиз
Делаю так, но выбираем максимум 2 записи
PHP:
		$q = mysql_query("select * from table") or die(mysql_error()) ;
		$har2 = array() ;
		
		$m = 0 ;
		while($row = mysql_fetch_row($q)) {
			$k = 0 ;
			foreach($har2 as $k=>$v) {
				if($v[0] == $row[0] && $v[2] == $row[2]) $k = 1 ;
			}
			if($k == 0) {
				$har2[$m] = $row ;
				$m ++ ;
			}
		}
 
тебе бы условие if($k == 0) включить в foreach, может в этом проблема
что-то вроде
PHP:
        $q = mysql_query("select * from table") or die(mysql_error()) ;
        $har2 = array() ;
        
        $m = 0 ;
        while($row = mysql_fetch_row($q)) {
            $k = 0 ;
            foreach($har2 as $k=>$v) {
             if($v[0] != $row[0] && $v[2] != $row[2])
		{
                $har2[$m] = $row ;
                $m ++ ;
            	}
            }
        }
 
PHP:
        $q = mysql_query("select * from table") or die(mysql_error()) ;
        $har2 = array() ;
        while($row = mysql_fetch_row($q)) {
                $har2[$row[0].$row[2]] = $row ;

адресация в массиве, как мы помним, может быть как цифровой так и ассоциативной :)
 
еще вопрос по тем же массивам:
Есть таблица sql, в ней 3 поля (id,id2,name)
В каждой записи могут быть одинаковые значения полей id,name по сравнению с остальными
Нужно выбрать из таблицы все записи и сформировать массив, но если ячейка в массиве с таким id и name уже есть в предыдущей ячейке, то пропустить.
Помогите плиз
Делаю так, но выбираем максимум 2 записи
PHP:
        $q = mysql_query("select * from table") or die(mysql_error()) ;
        $har2 = array() ;
        
        $m = 0 ;
        while($row = mysql_fetch_row($q)) {
            $k = 0 ;
            foreach($har2 as $k=>$v) {
                if($v[0] == $row[0] && $v[2] == $row[2]) $k = 1 ;
            }
            if($k == 0) {
                $har2[$m] = $row ;
                $m ++ ;
            }
        }

в MySQL есть функция DISTINCT для выборки уникальных значений по заданным полям. И не надо изобретать велосипед, когда всю логику можно реализовать одним sql-запросом.
 
Назад
Сверху