2016-02-11 2 views
0

Я пытаюсь написать пользовательскую функцию, пытаясь избежать переписать, если (Исеть каждый раз, когда я называю массив в цикле:если (IsSet внутри функции для петель

function ifvalueexists($valueexists){ 
if(isset ($valueexists)){ 
    $newvalue = $valueexists; 
    return $newvalue; 
    } 
else { 
    $newvalue = ''; 
    } 
    return $newvalue; 
} 

TEST:

$myarray = array(1, 2, 3); 

for ($i = 0; $i < 5; ++$i){ 
    echo ifvalueexists($myarray[$i]); 
} 

, но я все еще получаю: Undefined смещение: 3 и Undefined смещение: 4. Что я делаю неправильно Спасибо

+0

Вы не назвали бы эту функцию без '$ valueexists', так почему проверить это второй раз? –

+0

Вы не просто ищете 'echo $ myarray [$ i] ?? ''; '? – PeeHaa

+2

вы не можете проверить существование, передав то, что не существует в функции, и проверив его там. к моменту вызова isset() вы уже пытались получить доступ к этому значению, просто используя PASSING IT в качестве аргумента функции. –

ответ

6

доступ к данным происходит , прежде чем вы будете звонить?! функции. Вы пытаетесь отправить несуществующий индекс массива в качестве параметра функции. Вы можете получить эту работу, но вы должны передать весь массив в качестве параметра вместе с индексом, который вы пытаетесь получить доступ, чтобы избежать неверных индексов, что-то вроде этого:

function ifvalueexists(array $value, $index) { 
    if(isset ($value[$index])){ 
     return $value[$index]; // why not just return the value directly? 
    } 

    return ''; // no need for else here 
} 

Если вы хотели сделать это в одной строке, вы можете сделать это тоже:

function ifvalueexists(array $value, $index) { 
    return isset($value[$index]) ? $value[$index] : ''; 
} 
+0

С PHP 5.3 (?) Вы можете даже использовать 'return isset ($ value [$ index])?: ''' – kero

+0

@watcher Спасибо, я тестировал с помощью $ myarray = array (3, 4, 5); for ($ i = 0; $ i <5; ++ $ i) { \t \t echo ifvalueexists ($ myarray, [$ i]); } ', но я получаю недопустимый тип смещения в isset или пустой. Ошибка ... – codeispoetry

+0

@codeispoetry thats, потому что ваш второй параметр теперь является _array_, а не только индексом. вызовите его так: 'ifvalueexists ($ myarray, $ i)'. Индексы массивов не могут быть самими массивами (вот что сообщение об ошибке вам сообщает) –

1

Я думаю, что вы можете злоупотреблять своим кодом. Это всего лишь один лайнер, а не 10+ строк кода, который у вас есть.

$myarray = array(1, 2, 3); 

for ($i = 0; $i < 5; ++$i){ 
    echo (isset($myarray[$i])) ? $myarray[$i] : ''; 
} 
0

Вы можете использовать array_key_exists:

$myarray = array(1, 2, 3); 
for ($i = 0; $i < 5; ++$i){ 
    if(array_key_exists($i , $myarray) 
     echo $myarray[$i]; 
} 
+0

Спасибо Иманали, но у меня много петель и массивов; Я пытаюсь поместить все это в функцию и вызвать эту функцию, поэтому мне не нужно, если каждый раз, когда я вызываю массивы в циклах – codeispoetry

+0

Если вы не хотите использовать 'array_key_exists', когда функция вызова, а затем putt во все функции что вы звоните. –

Смежные вопросы