|
Тема
|
Е те сега да видя...
|
|
Автор |
ro6avia (усер френдли) |
Публикувано | 20.07.07 12:39 |
|
Случи се така че и аз запънах на нещо. Не че не мога да го направя по просташкия начин ама не се кефя на идеята да въртя масиви и обекти като изоглавен.
Ситуацията е следната:
Имам масив от обекти, като обектите си имат стойности. Ето и примерен дъмп
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
| |
Тема
|
Re: Е те сега да видя...
[re: ro6avia]
|
|
Автор |
buendia (el doce) |
Публикувано | 20.07.07 13:09 |
|
Нещо като
<?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 на 20.07.07 13:11.
| |
Тема
|
Re: Е те сега да видя...
[re: ro6avia]
|
|
Автор |
nupaT (pirat) |
Публикувано | 20.07.07 13:14 |
|
Нe знам как си пълниш масива кога го пълниш или го взимаш отнякъде като даденост.
при положение че го пълниш може да си направиш нещо като "map" което в случая ще ти е още един масив и да си индексираш key=>val1.
$key = array_search($val1);
$val2 = $myArray[$key]->getVal2();
иначе без някаква информация за индекса не се сещам как да стане без въртене на масива
П.П. Нямам идея и за колко голям масив става въпрос ... това с пълненето на допълнителен масив може да не се окаже добра идея.
П.П2. Няма ли начин (ако е тръвде голям масива) да го изнесеш в база данни с индекс val1
Break The UnBreakable
| |
|
На теб да не би основния език за програмиране да ти е Java ?
само Жавар може да о-клас-и за 1 променлива ;-)))
Все пак мисля че обхождането на елементите на масива ще е по-бързо и ефикасно отколкото викането на колбак функцията ;-)
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
| |
|
Тва за скороста може и да е така, може и да не е...само група руски учени го знаят без да провеждат тестове :)
Пък и въпроса ти беше как да стане без обхождане.
god is real...
if not defined as integer
| |
|
А какъв програмист ще о-класи за две променливи?
Аз ти предлагам индекса за търсене да го извадиш в отделен array извън stdClass, точно както каза пирата. Не знам какъв е твоя стил на писане, но аз винаги съм предпочитал където е възможно да разлагам обектите на редици, дори ако станат 10-15. Много по-бързо и леко работи.
| |
|
|
|
|