Е те сега да видя...

5 отговора 0 прегледа
#1

Е те сега да видя...

Случи се така че и аз запънах на нещо. Не че не мога да го направя по просташкия начин ама не се кефя на идеята да въртя масиви и обекти като изоглавен.

Ситуацията е следната:
Имам масив от обекти, като обектите си имат стойности. Ето и примерен дъмп

array(3) {
[0]=>
object(stdClass)#1 (2) {
["var1"]=>
string(8) "Var1Val1"
["var2"]=>
string(8) "Var2Val1"
}
[1]=>
object(stdClass)#2 (2) {
["var1"]=>
string(8) "Var1Val2"
["var2"]=>
string(8) "Var2Val2"
}
[2]=>
object(stdClass)#3 (2) {
["var1"]=>
string(8) "Var1Val3"
["var2"]=>
string(8) "Var2Val3"
}
}

Целта е да се вземе стойноста на произволен var2 при данни за var1.
Само моля ви не ми казвайте да въртя като изоглавен по целия масив, това мога и сам да се сетя ;-)

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #2

Re: Е те сега да видя...

Нещо като

<?php

$o1 = new StdClass;
$o1->var1 = 'Var1Val1';
$o1->var2 = 'Var2Val1';

$o2 = new StdClass;
$o2->var1 = 'Var1Val2';
$o2->var2 = 'Var2Val2';


$o3 = new StdClass;
$o3->var1 = 'Var1Val3';
$o3->var2 = 'Var2Val3';

$a = array($o1, $o2, $o3);

class SearchFor
{
static public $v;
}

function filter($o)
{
return $o->var1 == SearchFor::$v;
}

SearchFor::$v = 'Var1Val2';

print_r(array_filter($a, 'filter'));



може би?


Тва с класа SearchFor e щот не се сетих как иначе да предам параметър на callback функцията

PS. а и връща масив от всички обекти които отговарят на условието.

god is real...
if not defined as integer

Редактирано от buendia на

Отговор
в отговор на ro6avia #3

Re: Е те сега да видя...

Нe знам как си пълниш масива кога го пълниш или го взимаш отнякъде като даденост.

при положение че го пълниш може да си направиш нещо като "map" което в случая ще ти е още един масив и да си индексираш key=>val1.

$key = array_search($val1);
$val2 = $myArray[$key]->getVal2();

иначе без някаква информация за индекса не се сещам как да стане без въртене на масива

П.П. Нямам идея и за колко голям масив става въпрос ... това с пълненето на допълнителен масив може да не се окаже добра идея.

П.П2. Няма ли начин (ако е тръвде голям масива) да го изнесеш в база данни с индекс val1

Break The UnBreakable
Отговор
в отговор на buendia #4

Малеее

На теб да не би основния език за програмиране да ти е Java ?
само Жавар може да о-клас-и за 1 променлива ;-)))
Все пак мисля че обхождането на елементите на масива ще е по-бързо и ефикасно отколкото викането на колбак функцията ;-)

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #5

Re: Малеее

Тва за скороста може и да е така, може и да не е...само група руски учени го знаят без да провеждат тестове :)

Пък и въпроса ти беше как да стане без обхождане.

god is real...
if not defined as integer
Отговор
в отговор на ro6avia #6

Re: Малеее

А какъв програмист ще о-класи за две променливи?

Аз ти предлагам индекса за търсене да го извадиш в отделен array извън stdClass, точно както каза пирата. Не знам какъв е твоя стил на писане, но аз винаги съм предпочитал където е възможно да разлагам обектите на редици, дори ако станат 10-15. Много по-бързо и леко работи.

Отговор