in_array()

WBOY
풀어 주다: 2016-08-10 09:07:26
원래의
1168명이 탐색했습니다.

//기존 ID 세트 $set['old_id']와 프런트에서 보내온 ID 세트 $set['new_id']를 비교

<code>public function contrast_new_old_id(){
    //从前台传来的id组
    $checkids['id']=$this->input->post('id');

    //根据逗号将$checkids['id']拆解,并形成新ID集合$set_new_id
    $set_new_id=explode(',', $checkids['id']);

    //从数据库中取得的现有的ID的集合$set_old_id
    $set_old_id=$this->m_checkout->acquire_old_id();    
    //print_r($set_old_id);
    //将$set_new_id 中的id一个个拿出来,在$set_old_id 中作对比。将在$set_old_id 中没有的ID存入数据库
    
        for ($i=0; $i < count($set_new_id); $i++) { 

            if(in_array($set_new_id[$i], $set_old_id)){
                //当前数据库中有的
                echo "ID: ".$set_new_id[$i]." 存在<br>";

                $this->load->view('checkout/v_test');

            }else{
                //将当前数据库中没有的写进数组$checkout[]
                $checkout[$i]=$set_new_id[$i];    

            }
        }
    print_r($checkout);
    
    //$this->m_checkout->add_new_id($checkout);
}</code>
로그인 후 복사
로그인 후 복사

내가 전달한 값:
123,1233

print_r($set_old_id):
배열 ( [0] => 배열 ( [ID] => 1 ) [1] => 배열 ( [ID] => 12 ) [2] = > 배열( [ID] => 123 ) [3] => 배열( [ID] => 1234 ) [4] => 배열( [ID] => 12345 )

인쇄됨:
ID: 123 존재
배열( [0] => 123 [1] => 1233 )

질문: 왜 print_r($checkout);이 여전히 123인가요?
분명히 선별했습니다.
하나님께서 저에게 말씀해 주시기를 바랍니다. . 감사합니다

답글 내용:

//기존 ID 세트 $set['old_id']와 프런트에서 보내온 ID 세트 $set['new_id']를 비교

<code>public function contrast_new_old_id(){
    //从前台传来的id组
    $checkids['id']=$this->input->post('id');

    //根据逗号将$checkids['id']拆解,并形成新ID集合$set_new_id
    $set_new_id=explode(',', $checkids['id']);

    //从数据库中取得的现有的ID的集合$set_old_id
    $set_old_id=$this->m_checkout->acquire_old_id();    
    //print_r($set_old_id);
    //将$set_new_id 中的id一个个拿出来,在$set_old_id 中作对比。将在$set_old_id 中没有的ID存入数据库
    
        for ($i=0; $i < count($set_new_id); $i++) { 

            if(in_array($set_new_id[$i], $set_old_id)){
                //当前数据库中有的
                echo "ID: ".$set_new_id[$i]." 存在<br>";

                $this->load->view('checkout/v_test');

            }else{
                //将当前数据库中没有的写进数组$checkout[]
                $checkout[$i]=$set_new_id[$i];    

            }
        }
    print_r($checkout);
    
    //$this->m_checkout->add_new_id($checkout);
}</code>
로그인 후 복사
로그인 후 복사

내가 전달한 값:
123,1233

print_r($set_old_id):
배열 ( [0] => 배열 ( [ID] => 1 ) [1] => 배열 ( [ID] => 12 ) [2] = > 배열( [ID] => 123 ) [3] => 배열( [ID] => 1234 ) [4] => 배열( [ID] => 12345 )

인쇄됨:
ID: 123 존재
배열( [0] => 123 [1] => 1233 )

질문: 왜 print_r($checkout);이 여전히 123인가요?
분명히 선별했습니다.
하나님께서 저에게 말씀해 주시기를 바랍니다. . 감사합니다

<code>$a = [1,2,3];
$b = [1,4,5];
for($i = 0, $l = count($a); $i < $j; $i ++) {
    if (in_array($$a[$i], $b)) {
        //then...
    } else {
        //then...
    }
}</code>
로그인 후 복사

in_array를 올바르게 사용하는 예입니다. 구체적인 문제를 직접 생각해 보세요. 코드를 보면 $set['old_id']가 어떻게 생겼는지 알 수 없습니다.

우선 $set_old_id의 형식이 잘못되었습니다. 또한, in_array 기능을 사용할 때 "이상한 동작"에 주의해야 합니다. 이 기능을 사용할 때 주의할 점은 in_array 매뉴얼을 참고하시기 바랍니다.

$set_old_id의 형식이 올바르면 ID가 추출되어 [1,2,3,4]와 같은 1차원 배열로 구성됩니다. 그런 다음 in_array 함수를 사용할 때 여기서 세 번째 매개변수를 사용해야 합니다. 이는 엄격한 일치를 의미합니다(유형과 값이 정확히 동일해야 함). 예:

<code class="php">in_array($set_new_id[$i], $set_old_id, true)</code>
로그인 후 복사

이렇게 하면 배열에 값이 존재하는지 정확하게 판별할 수 있습니다. 물론 isset() 등의 다른 방법을 사용할 수도 있습니다. PHP 매뉴얼에는 많은 경우가 있습니다.

저도 예전에 in_array()을 사용하면서 속은 적이 있었는데, 여기에 "PHP의 "Some "traps"""이라고 기록해 두었습니다.

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿