Jump to content

need help with array searching


megglz

Recommended Posts

I am including my test.php for other to run.

 

I have a very large array of concatenated hash values. I have another array that contains the first 8 hash values of the other array. I have a function to locate them in the larger array. Depending on their index value I then choose the index of the value before or behind them for adding to something else later. This 'computeWalk' method works for small arrays but for larger arrays I notice duplicates or errors with larger ones.

 

For example.

 

The first array returns:

Array ( [0] => 1 [1] => 18 [2] => 18 [3] => 35 [4] => 33 [5] => 33 )

The values for i's to get each of these values are

I = 0

I = 19

I = 29

I = 34

I = 37

I = 39

 

Walking through the method by hand,

0%2 = 0

So the first element of the array will be 1. CORRECT.

19%2 = 1

So the next element will be 18. CORRECT.

29%2 = 1

The next element should be 28. It returns 18.

34%2 = 0

The next element will be 35. Correct.

37%2 = 1

The next element should be 36. It returns 33.

39%2 = 1

The next element should be 38. It returns 33.

 

I am not sure why it's doing the above.

I also tried array_search and it computed it the same way.

 

Would appreciate any help.

 

<?php
$arrayTree = array();
$arrayTree[0] = "9d027b1c4068d81287c9170f4b291387f8327eb7";
$arrayTree[1] = "4c8fabdc24c2d8205db916a22e9459195833a272";
$arrayTree[2] = "209526afab9e85b54e1832a820a7f578b7760af0";
$arrayTree[3] = "59d6926525e941edca99493b2b2a4f0a6efcb757";
$arrayTree[4] = "c8b49b8e414a09ddb693c580ecdfa6793c845f9d";
$arrayTree[5] = "b207bea6c4833d90f6ee4e694ffb148c046b0eb3";
$arrayTree[6] = "6d72a84b3aefbd3766078ed17a19aebb0c4ae026";
$arrayTree[7] = "b00207b8944520ea3817334615a7cdbf8214232a";
$arrayTree[8] = "d934f53af9bee26f35df7206dc06211778996986";
$arrayTree[9] = "de2ecd02fd017b0311dbfe589b5faa7954ced196";
$arrayTree[10] = "7d9752d09d3097fac748b6767472f9b69a65ed2e";
$arrayTree[11] = "62630fe109b42747b4c53065ec96aabf7b14d7b6";
$arrayTree[12] = "d727b5b8ffaeadbac75123801c270fd65f19251c";
$arrayTree[13] = "e39a9141fd9ce9426e88f30b6f245fdbb8f887a5";
$arrayTree[14] = "85fe053baa7ccf469c440a7dd98381228a0c52c3";
$arrayTree[15] = "6199634d410d0c91fd6ff99af9eabd5a1c7911de";
$arrayTree[16] = "af594de7d539519445013b7c87f02edbf3c44653";
$arrayTree[17] = "b6eb6dab75d092f4be345925ccbf87ff1e17fc31";
$arrayTree[18] = "2163ca6b0a608242712af82a81599f1f95c26dee";
$arrayTree[19] = "9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272";
$arrayTree[20] = "209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757";
$arrayTree[21] = "c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb3";
$arrayTree[22] = "6d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232a";
$arrayTree[23] = "d934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced196";
$arrayTree[24] = "7d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6";
$arrayTree[25] = "d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a5";
$arrayTree[26] = "85fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911de";
$arrayTree[27] = "af594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc31";
$arrayTree[28] = "2163ca6b0a608242712af82a81599f1f95c26dee";
$arrayTree[29] = "9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757";
$arrayTree[30] = "c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232a";
$arrayTree[31] = "d934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6";
$arrayTree[32] = "d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911de";
$arrayTree[33] = "af594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee";
$arrayTree[34] = "9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232a";
$arrayTree[35] = "d934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911de";
$arrayTree[36] = "af594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee";
$arrayTree[37] = "9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232ad934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911de";
$arrayTree[38] = "af594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee";
$arrayTree[39] = "9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232ad934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911deaf594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee";
$arrayTree[40] = "54u58rfhfheyrr4gfdtfvgw36tr36";
$arrayTree[41] = "54u58rfhfheyrr4gfdtfvgw36tr369d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232ad934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911deaf594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee";


$arrayDocs = array();
$arrayDocs[0] = "9d027b1c4068d81287c9170f4b291387f8327eb7";
$arrayDocs[1] = "4c8fabdc24c2d8205db916a22e9459195833a272";
$arrayDocs[2] = "209526afab9e85b54e1832a820a7f578b7760af0";
$arrayDocs[3] = "59d6926525e941edca99493b2b2a4f0a6efcb757";
$arrayDocs[4] = "c8b49b8e414a09ddb693c580ecdfa6793c845f9d";
$arrayDocs[5] = "b207bea6c4833d90f6ee4e694ffb148c046b0eb3";
$arrayDocs[6] = "6d72a84b3aefbd3766078ed17a19aebb0c4ae026";
$arrayDocs[7] = "b00207b8944520ea3817334615a7cdbf8214232a";
$arrayDocs[8] = "d934f53af9bee26f35df7206dc06211778996986";
$arrayDocs[9] = "de2ecd02fd017b0311dbfe589b5faa7954ced196";
$arrayDocs[10] = "7d9752d09d3097fac748b6767472f9b69a65ed2e";
$arrayDocs[11] = "62630fe109b42747b4c53065ec96aabf7b14d7b6";
$arrayDocs[12] = "d727b5b8ffaeadbac75123801c270fd65f19251c";
$arrayDocs[13] = "e39a9141fd9ce9426e88f30b6f245fdbb8f887a5";
$arrayDocs[14] = "85fe053baa7ccf469c440a7dd98381228a0c52c3";
$arrayDocs[15] = "6199634d410d0c91fd6ff99af9eabd5a1c7911de";
$arrayDocs[16] = "af594de7d539519445013b7c87f02edbf3c44653";
$arrayDocs[17] = "b6eb6dab75d092f4be345925ccbf87ff1e17fc31";
$arrayDocs[18] = "2163ca6b0a608242712af82a81599f1f95c26dee";


foreach($arrayDocs as $doc) {
$bitIndex = computeWalk($arrayTree, $doc);
echo "<br/>";
        print_r($bitIndex);
	echo "<br/>";
}

function computeWalk($array, $needle) {
    $result = array();

    for ($i = 0; $i < count($array) - 1; $i++) {
        if (false !== strpos($array[$i], $needle)) {

	 echo " I = ".$i;
            if ($i % 2 == 0) {
                $result[] = getItemIndex($array[$i + 1], $array);
            } else {
                $result[] = getItemIndex($array[$i - 1], $array);
            }
        }
    }
    return $result;
}


function getItemIndex($item, $array) {
$myPosition=-1;
for ($i = 0; $i<count($array)-1; $i++) {
if($array[$i]==$item) {
$myPosition = $i;
break;
}
}
return $myPosition;
}
?>

Link to comment
https://forums.phpfreaks.com/topic/227983-need-help-with-array-searching/
Share on other sites

Do you really need getItemIndex?

 

<?
	$arrayTree = array(
	'9d027b1c4068d81287c9170f4b291387f8327eb7',
	'4c8fabdc24c2d8205db916a22e9459195833a272',
	'209526afab9e85b54e1832a820a7f578b7760af0',
	'59d6926525e941edca99493b2b2a4f0a6efcb757',
	'c8b49b8e414a09ddb693c580ecdfa6793c845f9d',
	'b207bea6c4833d90f6ee4e694ffb148c046b0eb3',
	'6d72a84b3aefbd3766078ed17a19aebb0c4ae026',
	'b00207b8944520ea3817334615a7cdbf8214232a',
	'd934f53af9bee26f35df7206dc06211778996986',
	'de2ecd02fd017b0311dbfe589b5faa7954ced196',
	'7d9752d09d3097fac748b6767472f9b69a65ed2e',
	'62630fe109b42747b4c53065ec96aabf7b14d7b6',
	'd727b5b8ffaeadbac75123801c270fd65f19251c',
	'e39a9141fd9ce9426e88f30b6f245fdbb8f887a5',
	'85fe053baa7ccf469c440a7dd98381228a0c52c3',
	'6199634d410d0c91fd6ff99af9eabd5a1c7911de',
	'af594de7d539519445013b7c87f02edbf3c44653',
	'b6eb6dab75d092f4be345925ccbf87ff1e17fc31',
	'2163ca6b0a608242712af82a81599f1f95c26dee',
	'9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272',
	'209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757',
	'c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb3',
	'6d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232a',
	'd934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced196',
	'7d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6',
	'd727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a5',
	'85fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911de',
	'af594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc31',
	'2163ca6b0a608242712af82a81599f1f95c26dee',
	'9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757',
	'c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232a',
	'd934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6',
	'd727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911de',
	'af594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee',
	'9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232a',
	'd934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911de',
	'af594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee',
	'9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232ad934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911de',
	'af594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee',
	'9d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232ad934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911deaf594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee',
	'54u58rfhfheyrr4gfdtfvgw36tr36',
	'54u58rfhfheyrr4gfdtfvgw36tr369d027b1c4068d81287c9170f4b291387f8327eb74c8fabdc24c2d8205db916a22e9459195833a272209526afab9e85b54e1832a820a7f578b7760af059d6926525e941edca99493b2b2a4f0a6efcb757c8b49b8e414a09ddb693c580ecdfa6793c845f9db207bea6c4833d90f6ee4e694ffb148c046b0eb36d72a84b3aefbd3766078ed17a19aebb0c4ae026b00207b8944520ea3817334615a7cdbf8214232ad934f53af9bee26f35df7206dc06211778996986de2ecd02fd017b0311dbfe589b5faa7954ced1967d9752d09d3097fac748b6767472f9b69a65ed2e62630fe109b42747b4c53065ec96aabf7b14d7b6d727b5b8ffaeadbac75123801c270fd65f19251ce39a9141fd9ce9426e88f30b6f245fdbb8f887a585fe053baa7ccf469c440a7dd98381228a0c52c36199634d410d0c91fd6ff99af9eabd5a1c7911deaf594de7d539519445013b7c87f02edbf3c44653b6eb6dab75d092f4be345925ccbf87ff1e17fc312163ca6b0a608242712af82a81599f1f95c26dee'
);

$arrayDocs = array(
	'9d027b1c4068d81287c9170f4b291387f8327eb7',
	'4c8fabdc24c2d8205db916a22e9459195833a272',
	'209526afab9e85b54e1832a820a7f578b7760af0',
	'59d6926525e941edca99493b2b2a4f0a6efcb757',
	'c8b49b8e414a09ddb693c580ecdfa6793c845f9d',
	'b207bea6c4833d90f6ee4e694ffb148c046b0eb3',
	'6d72a84b3aefbd3766078ed17a19aebb0c4ae026',
	'b00207b8944520ea3817334615a7cdbf8214232a',
	'd934f53af9bee26f35df7206dc06211778996986',
	'de2ecd02fd017b0311dbfe589b5faa7954ced196',
	'7d9752d09d3097fac748b6767472f9b69a65ed2e',
	'62630fe109b42747b4c53065ec96aabf7b14d7b6',
	'd727b5b8ffaeadbac75123801c270fd65f19251c',
	'e39a9141fd9ce9426e88f30b6f245fdbb8f887a5',
	'85fe053baa7ccf469c440a7dd98381228a0c52c3',
	'6199634d410d0c91fd6ff99af9eabd5a1c7911de',
	'af594de7d539519445013b7c87f02edbf3c44653',
	'b6eb6dab75d092f4be345925ccbf87ff1e17fc31',
	'2163ca6b0a608242712af82a81599f1f95c26dee'
);
?>
<pre>
<?
foreach($arrayDocs as $doc)
	echo  print_r(computeWalk($arrayTree, $doc), true), '<br><br>';

function computeWalk($array, $needle) {
	$result = array();

	for ($i = 0; $i < count($array) - 1; $i++) {
		if (strpos($array[$i], $needle) !== false) {
			echo 'I = ' . $i . '<br>';

			if (!($i & 1))
				$result[] = $i + 1;
			else
				$result[] = $i - 1;
		}
	}
	echo '<br>';
	return $result;
}

function getItemIndex($item, $array) {
	$myPosition = -1;

	for ($i = 0; $i < (count($array) - 1); $i++) {
		if($array[$i] == $item) {
			$myPosition = $i;
			break;
		}
	}
	return $myPosition;
}
?>
</pre>

 

Try this code; I changed it to:

 

if (!($i & 1))
$result[] = $i + 1;
else
$result[] = $i - 1;

 

This checks for odd and even numbers.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.