簡體   English   中英

通過php中的值查找多維關聯數組的鍵

[英]Find key of a multi-dimensional associative array by value in php

我正在嘗試使用數組函數(不循環整個數組集)來查找多維數組的鍵。

我的數組如下

$main_array = [];

$main_array[0]['id']=1001;
$main_array[0]['name']=test1;
$main_array[1]['id']=1002;
$main_array[1]['name']=test2;
$main_array[2]['id']=1001;
$main_array[2]['name']=test3;

我想通過使用該值來獲取數組的索引,而無需循環所有數組(因為我的數組有點大)。

如果我傳遞值“ 1001”,則我希望兩個索引分別為0和2。嘗試使用array_search()函數,在我的情況下不起作用。

請幫我解決這個問題。

我認為您無法完全避免搜索數組。

您的結構規划不好。 您應該使用id(應該是唯一的)作為數組的鍵,如下所示:

$main_array[1001]['name'] = 'foo'

這將更容易處理和維護。

我建議您在結構變大之前做出努力並更改結構。

您應該考慮更改array結構。 由於您的ID不是唯一的,因此具有相同ID的元素將保留在一個array

$main_array = array(
    1001 => array(
        array('name' => 'test1'),
        array('name' => 'test3'),
    ),
    1002 => array(
        array('name' => 'test2'),
    )
);

所以

print_r( $main_array[1001] );

會給你

Array
(
    [0] => Array
        (
            [name] => test1
        )

    [1] => Array
        (
            [name] => test3
        )

)

如果不可能,則必須遍歷整個陣列以實現此目的。

function arraySearchId( $id, $array ) {
    $results = array();
    foreach ( $array as $key => $val ) {
        if ( $val['id'] === $id ) {
            $results[] = $key;
        }
    }
    return $results;
}

echo '<pre>';
print_r( arraySearchId( 1001, $main_array ) );
echo '</pre>';

結果:

Array
(
    [0] => 0
    [1] => 2
)

作為你的代碼

$main_array = [];
$main_array[0]['id']=1001;
$main_array[0]['name']=test1;
$main_array[1]['id']=1002;
$main_array[1]['name']=test2;
$main_array[2]['id']=1001;
$main_array[2]['name']=test3;

您需要“無循環”,答案是:必須循環至少一次,以預處理數據並創建索引數組。

$indexed = array();
foreach($main_array as $i=>$item) {
    if( !isset($indexed[$item['id']]) ) $indexed[$item['id']] = array();
    $indexed[$item['id']][] = $i;
}

當您需要找到1001時

$result = $indexed['1001'] // array(0,2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM