source

PHP의 배열에서 특정 값의 인덱스를 가져옵니다.

factcode 2022. 12. 5. 21:15
반응형

PHP의 배열에서 특정 값의 인덱스를 가져옵니다.

어레이가 있습니다.

$list = array('string1', 'string2', 'string3');

지정된 값에 대한 인덱스를 가져오고 싶다(예:1위해서string2그리고.2위해서string3)

내가 원하는 것은 배열 내의 문자열 위치이다.

  • string1은 0 입니다.
  • string2는 1입니다.
  • string3은 2입니다.

어떻게 하면 좋을까요?

array_search그게 방법이야.

array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : mixed

문서에서:

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;

어레이를 수동으로 루프하여 인덱스를 찾을 수 있지만, 기능이 있는데 왜 인덱스를 찾을 수 있습니까?이 함수는 항상 키를 반환하며 연관 배열 및 일반 배열에서 잘 작동합니다.

그 중 몇 가지(및/또는 어레이 사이즈가 크다)만 하고 있다면 array_search는 올바른 방향으로 가고 있는 것입니다.

$list = array('string1', 'string2', 'string3');
$k = array_search('string2', $list); //$k = 1;

모든 것(또는 많은 것)이 필요한 경우 루프를 사용하는 것이 좋습니다.

foreach ($list as $key => $value) {
    echo $value . " in " . $key . ", ";
}
// Prints "string1 in 0, string2 in 1, string3 in 2, "

다른 사람들이 제안했어요array_search()값이 발견된 배열 요소의 키를 제공합니다.를 사용하여 어레이 키가 연속된 정수인지 확인할 수 있습니다.array_values():

$list = array(0=>'string1', 'foo'=>'string2', 42=>'string3');
$index = array_search('string2', array_values($list));
print "$index\n";

// result: 1

질문에서 다음과 같이 말씀하셨습니다.array_search()소용없었다.왜 그런지 설명해 주실래요?무엇을 시도했고 어떻게 요구를 충족하지 못했습니까?

문제는 배열에 숫자 인덱스가 없다는 것입니다.
array_values()를 사용하면 제로 인덱스 배열이 생성됩니다.이 배열을 검색하려면 for 루프를 사용해야 합니다.

$list = ['string1', 'string2', 'string3'];
$index = array_search('string2',array_values($list));

// 또는 어레이 구조를 고려했을 경우:

$array = array(
  'string1' => array('a' => '', 'b' => '', 'c' => ''),
  'string2' => array('a' => '', 'b' => '', 'c' => ''),
  'string3' => array('a' => '', 'b' => '', 'c' => ''),
);

// 그냥 할 수 있어

function findIndexOfKey($key_to_index,$array){
  return array_search($key_to_index,array_keys($array));
}

// 실행됨

print "\r\n//-- Method 1 --//\r\n";
print '#index of: string1 = '.findIndexofKey('string1',$array)."\r\n";
print '#index of: string2 = '.findIndexofKey('string2',$array)."\r\n";
print '#index of: string3 = '.findIndexofKey('string3',$array)."\r\n";

// 또는

print "\r\n//-- Method 2 --//\r\n";
print '#index of: string1 = '.array_search('string1',array_keys($array))."\r\n";
print '#index of: string2 = '.array_search('string2',array_keys($array))."\r\n";
print '#index of: string3 = '.array_search('string3',array_keys($array))."\r\n";

// 재귀적으로

print "\r\n//-- Method 3 --//\r\n";
foreach(array_keys($array) as $key => $value){
  print '#index of: '.$value.' = '.$key."\r\n";
}

// 출력

//-- Method 1 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2

//-- Method 2 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2

//-- Method 3 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2

array_keys PHP 기능을 사용해 보십시오.

$key_string1 = array_keys($list, 'string1');

보다 자세하게 해 주시겠어요?

$key = array_search('string2',$list)

난 괜찮아.좀 더 복잡한 일을 하려고 하시는 건가요?

이 코드는 올바른 다차원 배열로 작업하는 새로운 루틴과 같아야 합니다.

 $arr = array(
  'string1' => array('a' => '', 'b' => '', 'c' => ''),
  'string2' => array('a' => '', 'b' => '', 'c' => ''),
  'string3' => array('a' => '', 'b' => '', 'c' => '')
 );

 echo 'Index of "string2" = '. array_search('string2', array_keys($arr));

array_search는 정상적으로 동작합니다.테스트만 하면 키가 정상적으로 반환됩니다.

$list = array('string1', 'string2', 'string3');
echo "Key = ".array_search('string1', $list);
echo " Key = ".array_search('string2', $list);
echo " Key = ".array_search('string3', $list);

또는 인덱스의 경우

$list = array('string1', 'string2', 'string3');
echo "Index = ".array_search('string1', array_merge($list));
echo " Index = ".array_search('string2', array_merge($list));
echo " Index = ".array_search('string3', array_merge($list));
$find="Topsite";
$list=array("Tope","Ajayi","Topsite","Infotech");
$list_count=count($list);
sort($list);
for($i=0;$i<$list_count;$i++)
{
    if($list[$i]==$find){
         $position=$i;
    }

}
echo $position;

이를 위한 함수를 만들어야 합니다.그 목적을 위한 기능은 내장되어 있지 않다고 생각합니다.기본적으로는 모든 PHP 배열이 연관됩니다.키를 모르는 경우는, 이하와 같은 코드를 참조해 주세요.

<?php

$given_array = array('Monday' => 'boring',
'Friday' => 'yay',
'boring',
'Sunday' => 'fun',
7 => 'boring',
'Saturday' => 'yay fun',
'Wednesday' => 'boring',
'my life' => 'boring');

$repeating_value = "boring";

function array_value_positions($array, $value){
    $index = 0;
    $value_array = array();
        foreach($array as $v){
            if($value == $v){
                $value_array[$index] = $value;
            }
        $index++;
        }
    return $value_array;
}

$value_array = array_value_positions($given_array, $repeating_value);

$result = "The value '$value_array[0]' was found at these indices in the given array: ";

$key_string = implode(', ',array_keys($value_array));

echo $result . $key_string . "\n";//Output: The value 'boring' was found at these indices in the given array: 0, 2, 4, 6, 7

다음은 숫자 또는 문자열 색인에 사용할 수 있는 기능입니다.배열을 첫 번째 매개 변수로 전달한 후 인덱스를 이동해야 하는 요소에 전달하고 마지막으로 요소를 위로 이동하려면 방향을 -1로, 아래로 이동하려면 1로 설정합니다.예: 이동(['first'=>'Peter'', second'=>Paul', second'=>'Kate'', second'-1)은 Paul을 위로, 피터를 아래로 이동시킵니다.

function Move($a,$element,$direction)
{

$temp = [];
$index = 0;

foreach($a as $key=>$value)
{
    $temp[$index++] = $key;
}

$index = array_search($element,$temp);

$newpos = $index+$direction;

if(isset($temp[$newpos]))
{
        $value2 = $temp[$newpos];
        $temp[$newpos]=$element;
        $temp[$index]=$value2;
}
else
{
    # move is not possible
    return $a; # returns the array unchanged
}   

$final = [];

foreach($temp as $next)
{
    $final[$next]=$a[$next];
}

return $final;

}

언급URL : https://stackoverflow.com/questions/2959222/get-the-index-of-a-certain-value-in-an-array-in-php

반응형