Може така:
echo $result[2 - $exist];
или ако искаш така:
echo $result[($exist ^ 1) + 1];
<?
$result = array(1=>'Exist', 2=>'Not exist');
$exist = false;
$cycles = 5000000;
$dt1 = microtime(true);
for ($i=0; $i<$cycles; $i++) {
$rslt = $result[2-(integer)$exist];
}
$dt1 = microtime(true)-$dt1;
$dt2 = microtime(true);
for ($i=0; $i<$cycles; $i++) {
$rslt = $result[1+(integer)(!$exist)];
}
$dt2 = microtime(true)-$dt2;
$dt3 = microtime(true);
for ($i=0; $i<$cycles; $i++) {
$rslt = $result[1 + (integer)($exist) ^ 1];
}
$dt3 = microtime(true)-$dt3;
$dt4 = microtime(true);
for ($i=0; $i<$cycles; $i++) {
$rslt = ($exist) ? $result[1] : $result[2];
}
$dt4 = microtime(true)-$dt4;
echo "$dt1<br>$dt2<br>$dt3<br>$dt4";
?>
Notice: Undefined offset: 0 in D:\www\myads\htdocs\t.php on line 20
Notice: Undefined offset: 0 in D:\www\myads\htdocs\t.php on line 20
Notice: Undefined offset: 0 in D:\www\myads\htdocs\t.php on line 20
Notice: Undefined offset: 0 in D:\www\myads\htdocs\t.php on line 20
Notice: Undefined offset: 0 in D:\www\myads\htdocs\t.php on line 20
2.0027160644531E-5
7.1525573730469E-6
0.00060582160949707
1.0013580322266E-5
Notice: Undefined offset: 3 in D:\www\myads\htdocs\t.php on line 20
Notice: Undefined offset: 3 in D:\www\myads\htdocs\t.php on line 20
Notice: Undefined offset: 3 in D:\www\myads\htdocs\t.php on line 20
Notice: Undefined offset: 3 in D:\www\myads\htdocs\t.php on line 20
Notice: Undefined offset: 3 in D:\www\myads\htdocs\t.php on line 20
1.7881393432617E-5
7.1525573730469E-6
0.0006558895111084
1.0013580322266E-5
$dt5 = microtime(true);
for ($i=0; $i<$cycles; $i++)
{
switch($exist)
{
case 0:$rslt = $result[1];
break;
case 1:$rslt = $result[2];
break;
}
}
$dt5 = microtime(true)-$dt5;
$dt6 = microtime(true);
for ($i=0; $i<$cycles; $i++)
{
if($exist) {$rslt = $result[1];}
else {$rslt = $result[2];}
}
$dt6 = microtime(true)-$dt6;
виж сега типът boolen заема 1 байт в паметта, като го кастнеш към int не може променливата да сочи към същото място защото типът int заема 4 байта, следователно интерпретатора прави нова временна променлива и ползва нея за пресмятането от къде идва и забавянето.Кастването не е такова каквото го мислиш. Имаш клетка в паметта където имаш запаметена стойност за булев тип. Представи си че имаш променлива от тип интегер на същото място в паметта и я четеш. Няма никаква разлика. (точно в PHP не съм на 100% сигурен че е реализирано по този начин)
принципът е абсолютно същият.За компилацията си прав, но само за компилацията. PHP е скриптов език и няма компилация. Имаме само парсване.
напълно е възможно макар че е малко вероятно според мен.Човек сложи си читава версия на PHP. Парсера му е омацан.
error_reporting(E_ALL);
ini_set('display_errors' , 'on');
$dt5 = microtime(true);
for ($i=0; $i<$cycles; $i++) {
$rslt = $result[2];
if($exist){
$rslt = $result[1];
}
}
$dt5 = microtime(true)-$dt5;
само да добавя още един аспект на програмирането: Четимост на Кода. По-добре го напишете така, че всеки да го разбира, а не на един ред всичко и да изглежда "гениално".
само да добавя още един аспект на програмирането: Четимост на Кода. По-добре го напишете така, че всеки да го разбира, а не на един ред всичко и да изглежда "гениално".
Защото програмирането не е лесно.А защо не така: $result = array(1=>'Намерено', 0 =>'Ненамерено');
Останалото е лесно...
....
Още една задачка? Какъв ще е резултата от този скрипт и защо?
$test = true;
$arr = array('ala','bala','nica');
echo in_array($test, $arr);