Работа с массивами

StUV

Rotaredom
Работа с массивами

Есть ли в ПХП функция, которая бы выделяла из массива arr[M][N] все N, для которых при фиксированном M все значения arr[M][N] одинаковы ?
 

Дmитpий

Guest
ты сам понял, что сказал?

ты бы хоть пример массива привел. И пример результата работы этой функции!
 

StUV

Rotaredom
к первому вопросу (пример):
PHP:
$arr[1][5] = 1;
$arr[1][7] = 1;
$arr[1][11] = 2;
$arr[2][4] = 3;
func($arr) возвращает массив {5,7}

+ вопрос 2. как передать массив целиком в ПОСТе ?
 

tony2001

TeaM PHPClub
>как передать массив целиком в ПОСТе ?
встречный вопрос:
а что, можно только частично передать в ПОСТе?
 

StUV

Rotaredom
PHP:
<?php
//  $a = array(); // сорри, кажется здесь 
// хотя, так тоже не работает
  
if ($_SERVER['REQUEST_METHOD'] == 'GET')
{
  $a = array(
              1 => 1,
              3 => 2,
              5 => 4
            );
  print_r($a);
}
else
{
  print_r($_POST['a']);
}
?>

<form method='post'>
  <input type='hidden' name='a'>
  <input type='submit'>
</form>
если ГЕТ - получаю: Array ( [1] => 1 [3] => 2 [5] => 4 )

если ПОСТ : ничего не получаю (кроме формы)

в чем ошибка ?
Спасибо
 

f1

formula 1
ничего не передаешь, ничего не получаешь

по моему логично :)
 

Дmитpий

Guest
Это вообче-то что-то странное, но если по описанию задачи, то вот этот алгоритм работает!

PHP:
<?php

$arr[1][5] = 1; 
$arr[1][7] = 1; 
$arr[1][11] = 2; 
$arr[2][4] = 3;
$tmp_arr = Array();

$emp = 0;
while (list($k1,$v1) = each ($arr)) {
 while (list($k2,$v2) = each ($arr[$k1])) {
  if ($emp == 0) {
   $emp = 1;
   $tmp_value = $v2;
   array_push($tmp_arr,$k2);
  } else {
   if ($v2 == $tmp_value) {
    array_push($tmp_arr,$k2);
   }
  }
 }
}

print_r($tmp_arr);

?>
 

StUV

Rotaredom
2 f1:
так вот в том то и дело - можно ли обойтись без безумных циклов ? (если в массиве 100 - ... элементов)
 

StUV

Rotaredom
2All:
без сессий, кук и циклов (и метода DiMA из ссылки выше) никак ?
 

Demiurg

Guest
тебе решение нудно или просто заняться нечем ?
 

PhpDeveloper

Guest
Автор оригинала: StUV
к первому вопросу (пример):
PHP:
$arr[1][5] = 1;
$arr[1][7] = 1;
$arr[1][11] = 2;
$arr[2][4] = 3;
func($arr) возвращает массив {5,7}

+ вопрос 2. как передать массив целиком в ПОСТе ?
seralize
 

StUV

Rotaredom
2 Demiurg:

есть дерево хранимое в базе... Возникла проблема - при внесении ряда изменений в структуре дерева есть вариант - или от скрипта к скрипту првить массив, а после писать в базу, либо делать это после каждой операции...
Мне кажется, что первый вариант предпочтительнее, отсюда и вопрос....

2 PhpDeveloper:
спасибо, я правильно понимаю:

$a = serialize($arr);
$_POST['a'] = $a;

затем
$arr = unserialize($_POST['a']);

так ?
 

Demiurg

Guest
либо сразу вноси изменения либо используй сессии.
 

StUV

Rotaredom
2Demiurg:
есть смысл в использовании сессий если не нужна авторизация ? (т е в смысле, что это нормальное явление при использовании этого "инструмента")

2PhpDeveloper:
где ошибка в таком примере (не выводится массив после строки echo "POST = "; ):
PHP:
<?php
$arr = array();
if ($_SERVER['REQUEST_METHOD'] == 'GET')
{
  $arr = array(
              1 => 1,
              3 => 2,
              5 => 4
            );
  print_r($arr);
  $a = serialize($arr);
}
else
{
  $arr = unserialize($_POST['a']);
  echo "POST = ";
  print_r($arr);
}

?>
<form method='post' action='1.php'>
  <input type='hidden' name='a'>
  <input type='submit'>
</form>
?

спасибо
 
Сверху